انتخابی که شما انجام میدهید اعم از آنکه چگونه و کجا یک وضعیت را ذخیره نمایید تاثیر بسزایی در عملکرد و مقیاس پذیری برنامه شما خواهد داشت. چند نوع مختلف از وضعیت ها وجود دارد که در اینجا به ۲ مورد از مهمترین وضعیت ها و تاثیر آنها در بهینه سازی عملکرد ASP.Net اشاره خواهیم کرد:
- Application State
- Session State
Application State
Application state در واقع برای ذخیره سازی اطلاعات ایستا در برنامه کاربرد دارد. ASP.Net به صورت کلی Application state را جهت انتقال برنامه های ASP(classic active server page) به پلتفرم .net بکار میبرد و این امر را برای توسعه دهندگان بسیار راحت ساخته است.
اگر از Application State استفاده می نمایید میتوانید موارد زیر را جهت بهینه سازی عملکرد برنامه مد نظر داشته باشید:
- از خصوصیت (property) های ایستا بجای اشیاء جهت ذخیره سازی Application state استفاده نمایید.
- از Application state جهت اشتراک گذاری داده های ایستا و فقط خواندنی استفاده نمایید.
- از Application State جهت ذخیره اشیاء STA COM استفاده ننمایید.
- ذخیره سازی در خصوصیت های ایستا بجای اشیاء
باید همواره سعی نمایید داده ها را در اعضای ایستای یک کلاس تعریف نمایید ( از تعریف آنها در اشیاء برنامه خود بپرهیزید). این امر باعث افزایش کارایی برنامه شما خواهد شد زیرا دسترسی شما به یک متغییر ایستا بسیار سریعتر است .
به عنوان مثال میتوانید قطعه کد ساده زیر را در نظر بگیرید(تعریف در اعضای static یک کلاس صورت گفته است):
<%
private static string[] _states[];
private static object _lock = new object();
public static string[] States
{
get {return _states;}
}
public static void PopulateStates()
{
//ensure this is thread safe
if(_states == null)
{
lock(_lock)
{
//populate the states }
}
}
public void Application_OnStart(object sender, EventArgs e)
{
PopulateStates();
}
%>
اشتراک گذاری داده های ایستا و فقط خواندنی توسط Application State
Application State دارای کاربردی گسترده بوده و خاص سرور است بنابر این شما میتوانید اطلاعات ورودی و خروجی را در آن ذخیره نمایید ولیکن بهتر است داده های فقط خواندنی read-only)) را در آن ذخیره نمایید تا از وابستگی سرور به این داده ها جلوگیری شود . اشیاء Cache شده میتوانند جایگزین مناسب تری برای داده های read-only باشند.
عدم استفاده از Application State جهت ذخیره اشیاء STA COM
عدم اجرای این عمل برنامه شما را درتنگنا قرار داده و باعث می شود کارایی برنامه شما بشدت کاهش یابد زیرا برنامه نوشته شده تحت پلتفرم asp.net یک نخ (thread) خاص را هنگام دسترسی به کامپوننت مورد نظر اجرا میکند.
Session State
اگر نیاز دارید که از Session State در برنامه ASP.Net استفاده نمایید می توانید از Session State های زیر استفاده نمایید و هریک دارای درجات مختلف بوده و عملکرد و مقیاس پذیری خاصی در برنامه شما خواهد داشت.
- Inproccess Session : عملکرد این نوع از انواع دیگر بالاتر بوده و در تنظیمات ASP.Net به صورت پیش فرض از این نوع session استفاده می شود .
- OutProccess Session (State Server) : این نوع به نام state Server نیز شناخته می شود. این session از ویندوز سرویسی با نام ASP State جهت تنظیمات استفاده می نماید لذا برای استفاده از آن باید این ویندوز سرویس را در وب سرور اجرا نمایید .
- SQL Session(SQL Server Mode) : این نوع از sessionها در دیتابیس ذخیره شده و در مورد وب سایت هایی که دارای sessionهای سنگین میباشند مورد استفاده قرار می گیرد.
لازم به ذکر است که در این نوع ، سرعت انتقال نسبت به دو نوع دیگر بین ۱۰ تا ۲۵ درصد کمتر بوده و برای استفاده از این نوع باید دستورالعمل مربوطه را دنبال نمود.
جهت بهینه سازی عملکرد Session State دستور العمل های زیر را مد نظر داشته باشید :
- جهت کاهش هزینه سریال سازی (Serialization) بهتر است از نوع داده پایه استفاده نمایید.اگر از StateServer و یا SQLServer استفاده می نمایید هرچه گراف اشیاء object graph شما ساده تر باشد سریع تر Serialize خواهد شد.جهت کاهش هزینه سریال سازی میتوانید از انواع داده مانند Int, Byte, Decimal, String, DateTime, TimeSpan, Guid, IntPtr استفاده نمایید و ASP.Net از یک متد داخلی برای بهینه سازی و کاهش این نرخ استفاده می نماید.
- Session State را هنگامی که به آن نیازی ندارید غیر فعال سازید. این امر به پایان دادن به پردازش session های تعلیق شده کمک شایانی خواهد کرد .
میتوان session state را برای همه ی برنامه های موجود بر روی server و یا برای برخی برنامه های خاص و یا صفحه ای مورد نظر مانند آنچه در ذیل آمده است ،غیر فعال نمود:
جهت غیر فعال کردن Session State برای همه ی برنامه های میتوان کد زیر را در Machine.config قرار داد:
<sessionState mode=’Off’/>
جهت غیر فعال کردن Session State برای برنامه ای خاص میتوان کد بالا را در web.config برنامه مورد نظر قرار داد.
جهت غیر فعال کردن Session State برای صفحه ای خاص میتوان از کد زیر در تنظیمات صفحه page setting استفاده نمود:
<%@ Page EnableSessionState=”false” . . .%>
- از ذخیره اشیاء STA COM در Session State خودداری نمایید و اگر جهت ذخیره استفاده می نمایید، از صفت AspCompat مربوط به @page به صورت Directive اطمینان حاصل نمایید.
- از صفات و ویژگی های read-only هرگاه که میتوانید استفاده نمایید. و برای صفحاتی که فقط session data را میخوانند مقدار EnableSessionState را برابر ReadOnly قرار دهید(مانند نمونه کد زیر)
<%@ Page EnableSessionState=”ReadOnly” . . .%>