PDA

View Full Version : سوال: بهترین روش برای ذخیره کردن و خواندن مداوم یک فیلد



jaykob
سه شنبه 10 آذر 1394, 09:06 صبح
سلام


من در یک برنامه نیاز دارم که مرتب یکسری فیلد رو چک کنم و متناسب با اون فرم مناسب رو لود کنم مثلا طرف که روی ثبت سند کلیک کرد بر اساس یک فیلد ثابتی که یکبار برای اولین بار مثلا یا در web.config می گذارم یا هر کجای دیگه فرم حقیقی یا حقوقی رو Load کنه . سوال من در حال حاضر این موضوع هست این فیلد ثابت در کل برنامه رو در کجا ذخیره کنم و چطوری با چه کدی اون رو بازیابی کنم سرعت خیلی برام مهم هست ؟ آیا بهترین گزینه Web.Config هست ؟ یا یک فایل xml ؟ یا یک فایل txt ؟ یا دیتابیس ؟ یا ... ؟ ممنون می شم راهنمایی کنم

با تشکر

A.S.Roma
جمعه 13 آذر 1394, 12:28 عصر
مهم نیست کجا اینو Save می کنید.

تنظیمات این چنینی رو باید در متغییرهای Singleton در حافظه نگه دارید.

jaykob
جمعه 13 آذر 1394, 12:33 عصر
مهم نیست کجا اینو Save می کنید.

تنظیمات این چنینی رو باید در متغییرهای Singleton در حافظه نگه دارید.

سلام

ممنون بابت پاسخ . امکان داره این موضوع رو باز کنید من اطلاعاتی در مورد این مبحثی که گفتید ندارم با یک مثالی چیزی توضیح بدید خیلی ممنون می شم

با تشکر

A.S.Roma
جمعه 13 آذر 1394, 12:46 عصر
public class Configuration
{
private static object syncObject = new object();
private static int _licenseCount = -1;
public static int Licensecount
{
get
{
if(_licenseCount == -1)
{
lock (syncObject)
{
if(_licenseCount == -1)
{
_licenseCount = ReadValue();
}
}
}
return _licenseCount;
}
}


public static void ResetLicenseCount()
{
_licenseCount = -1;
}


private int ReadValue()
{
//Read the desire value from anywhere you want !
}
}

jaykob
جمعه 13 آذر 1394, 12:51 عصر
public class Configuration
{
private static object syncObject = new object();
private static int _licenseCount = -1;
public static int Licensecount
{
get
{
if(_licenseCount == -1)
{
lock (syncObject)
{
if(_licenseCount == -1)
{
_licenseCount = ReadValue();
}
}
}
return _licenseCount;
}
}


public static void ResetLicenseCount()
{
_licenseCount = -1;
}


private int ReadValue()
{
//Read the desire value from anywhere you want !
}
}



تشکر از شما

بی ادبی هست اما همونطور گفتم چون تجربه ای در این رابطه ندارم می شه توضیحات تکمیلی هم بدید تا بتونم کاملا به صورت عملیاتی استفاده کنم از این متد شما

تشکر

A.S.Roma
جمعه 13 آذر 1394, 13:11 عصر
فرضا" شما قراره یه عدد int رو از یکجایی (فرقی نداره کجا) بارها و بارها بخونید و بر اساس مقدار اون تصمیماتی بگیرید.
من تو مثالم اسم کلاسی که وظیفه ی فراهم آوردن این دیتا رو داره رو Configuration گذاشتم.
و نام فیلدی که قراره این دیتا داخلش قرار بگیره رو گذاشتم _licensecount
شما اولین جایی از برنامه که بنویسید Configuration.LicenseCount متد get از Property بالا اجرا میشه و چون مقدار _licenseCount برابر -1 هست باعث اجرا شدن متد ReadValue میشه. اینجا شما باید مقدار مورد نظر رو از جایی بخونید. (فایل xml, text دیتابیس و ... ) بعد از بدست آوردن مقدار مورد نظر، اون مقدار در فیلد _licenseCount قرار میگیره و از این به بعد بعد از اجرای دستور Configuration.Licensecount متد ReadValue اجرا نمیشه و مقدار از فیلد _licenseCount (از حافظه) خونده میشه.
متد ResetLicenseCount هم زمانی کاربرد داره که مقدار ذخیره شده در Repository اصلی تغییر پیدا کرده و باید دوباره خونده بشه.

در واقع تکنیک بالا یه جور ساخت Cache هست. و در مواقعی کاربرد داره که دیتا قراره زیاد خونده بشه و تغییر توش کمه. (تنظیمات اصلی سیستم.)

»» متغییر sycObject برای رفع مشکل همزمانی در نظر گرفته شده.

Mousavmousab
دوشنبه 16 آذر 1394, 09:46 صبح
سلام

از کلاس Application در دات نت استفاده کنید.

hoolity.com

jaykob
دوشنبه 16 آذر 1394, 10:39 صبح
سلام

از کلاس Application در دات نت استفاده کنید.

hoolity.com


سلام و تشکر از شما

امکان داره نمونه کد + توضیحات بزارید ؟ یا اینکه اگر فیلم آموزشی دارید در سایتتون لینک بدید من پیدا نکردم چیزی .

ممنون