خواندن اطلاعات از یک استاتیک در ASP.NET MVC
سلام
من میخوام یکسری اطلاعات رو از دیتابیس و جاهای دیگه لیست کنم توی کل برنامه
یک بار این اطلاعات رو بگیرم و دفعات بعدی از همین لیست بخونم برای تمام کاربرا مثل تنظیمات سایت و غیره
فقط مسئله اینه نمیدونم باید چکار بکنم
توی Global.asax بذارم؟ بعد چطوری بخونم؟ اطلاعاتی دارید بگذارید استفاده ببریم ممنون :متفکر:
نقل قول: خواندن اطلاعات از یک استاتیک در ASP MVC
اگر حجم لیستی که بهش اشاره کردید زیاد نیست می توانید اون رو در کالکشن Application قرار بدید و هر گاه نیاز داشتید از اونجا بخوانید. فرض کنید لیست شما این طوری تعریف شده باشه:
List<Person> people = new List<Person>();
در این صورت به این شکل می توانید اون را داخل کالکشن Application قرار بدید:
Application["People"] = people;
و هر جای برنامه بهش نیاز داشتید این طوری بخوانیدش:
if(Application["People"] != null) // اطمینان از این که لیست شما الان در قالب یک آبجکت داخل کالکشن قرار داره
{
var people = Application["People"] as List<Person>;
// rest of your code...
}
دقت داشته باشید با توجه به اینکه کالکشن فوق در حافظه Ram سرور نگهداری میشه قرار دادن آبجکت های بزرگ در اون می تونه Performance برنامه شما رو کاهش بده. علاوه بر اون، اگر این مورد رو رعایت نکردید و برنامه تون رو روی هاست اشتراکی قرار دادید با توجه به این که اکثر هاست ها جهت تقسیم منابع سرور بین سایت های مختلف، برای هر سایت Application Pool جداگانه تعریف می کنند و مقدار رم کمی رو به هر سایت اختصاص میدن استفاده بیش از حد از کالکشن Application میتونه بواسطه پر کردن مقدار حافظه اختصاص داده شده باعث Restart شدن Application Domain شما بشه و سلامت اجرای برنامه شما زیر سوال بره.
نقل قول: خواندن اطلاعات از یک استاتیک در ASP MVC
نقل قول:
نوشته شده توسط
مهدی کرامتی
اگر حجم لیستی که بهش اشاره کردید زیاد نیست می توانید اون رو در کالکشن Application قرار بدید و هر گاه نیاز داشتید از اونجا بخوانید. فرض کنید لیست شما این طوری تعریف شده باشه:
List<Person> people = new List<Person>();
در این صورت به این شکل می توانید اون را داخل کالکشن Application قرار بدید:
Application["People"] = people;
و هر جای برنامه بهش نیاز داشتید این طوری بخوانیدش:
if(Application["People"] != null) // اطمینان از این که لیست شما الان در قالب یک آبجکت داخل کالکشن قرار داره
{
var people = Application["People"] as List<Person>;
// rest of your code...
}
دقت داشته باشید با توجه به اینکه کالکشن فوق در حافظه Ram سرور نگهداری میشه قرار دادن آبجکت های بزرگ در اون می تونه Performance برنامه شما رو کاهش بده. علاوه بر اون، اگر این مورد رو رعایت نکردید و برنامه تون رو روی هاست اشتراکی قرار دادید با توجه به این که اکثر هاست ها جهت تقسیم منابع سرور بین سایت های مختلف، برای هر سایت Application Pool جداگانه تعریف می کنند و مقدار رم کمی رو به هر سایت اختصاص میدن استفاده بیش از حد از کالکشن Application میتونه بواسطه پر کردن مقدار حافظه اختصاص داده شده باعث Restart شدن Application Domain شما بشه و سلامت اجرای برنامه شما زیر سوال بره.
از کجا میشه فهمید مثلا یه آبجکتی که توی حافظه قرار داره چقدر حجم رم رو گرفته و داره از منابع مصرف میکنه؟
نقل قول: خواندن اطلاعات از یک استاتیک در ASP MVC
نقل قول:
نوشته شده توسط
سعید کشاورز
از کجا میشه فهمید مثلا یه آبجکتی که توی حافظه قرار داره چقدر حجم رم رو گرفته و داره از منابع مصرف میکنه؟
فک کنم بشه حداکثر فضایی که یک آبجکت اشغال میکنه رو خودمون محاسبه کنیم از طریق سایز انواع داده در سی شارپ مثلا نوع داده بول یک بایت، دسیمال 16 بایت، int32 مقدار 4 بایت و به همین ترتیب محاسبه کنیم البته نمیدونم چقد دقیق میتونه باشه این روش :متفکر:
نقل قول: خواندن اطلاعات از یک استاتیک در ASP MVC
از cache هم میتونید استفاده کنید
نقل قول: خواندن اطلاعات از یک استاتیک در ASP MVC
نقل قول:
از کجا میشه فهمید مثلا یه آبجکتی که توی حافظه قرار داره چقدر حجم رم رو گرفته و داره از منابع مصرف میکنه؟
با نرم افزارهای Memory Profiler به راحتی میشه این کار رو انجام داد.
نقل قول: خواندن اطلاعات از یک استاتیک در ASP MVC
خیلی ممنون جناب کرامتی و جناب مهدوی
همین Application مورد نیازم هست ممنون
نقل قول: خواندن اطلاعات از یک استاتیک در ASP.NET MVC
به شخصه در لایه سرویس ، زمانی که تغییرات زیاد نیست و اطلاعات کمتر بروزرسانی میشوند ، متدی همانند کد زیر ایجاد می کنم که صرفاً در دفعه نخست که صدا زده می شود اجرا می شود و در سایر فراخوانی ها (تا مدت زمان انقضا کش) اطلاعات از کش خوانده می شود و در ادامه تمامی کوئری ها را بر روی خروجی متد زیر اجرا میکنم
private static object _objLock = new object();
private List<YourViewModel> CacheRepository()
{
var repository = MemoryCache.Default["YourViewModelRepository"];
if (repository == null)
{
List<YourViewModel> YourViewModels;
lock (_objLock)
{
repository = MemoryCache.Default["YourViewModelRepository"];
if (repository == null)
{
YourViewModels = //Get Data From Database
if (MemoryCache.Default.Contains("YourViewModelReposi tory"))
{
MemoryCache.Default.Remove("YourViewModelRepositor y");
}
MemoryCache.Default.Add("YourViewModelRepository", YourViewModels, DateTime.Now.AddHours(2));
}
else
{
return (List<YourViewModel>)repository;
}
}
return YourViewModels;
}
return (List<YourViewModel>)repository;
}