আমার অতীতে কয়েকবার কোডে ডেটা সঞ্চয় করতে চেয়েছিলাম। এটি এমন ডেটা হবে যা খুব কমই পরিবর্তিত হয় এবং এমন জায়গায় ব্যবহৃত হয় যেখানে কোনও ডাটাবেসে অ্যাক্সেস করা সম্ভব হয় না, ব্যবহারিক বা পছন্দসই হয় না। একটি ছোট উদাহরণ হ'ল দেশের তালিকা সংরক্ষণ করা। তার জন্য আপনি যেমন কিছু করতে পারেন:
public class Country
{
public string Code { get; set; }
public string EnglishName {get;set;}
}
public static class CountryHelper
{
public static List<Country> Countries = new List<Country>
{
new Country {Code = "AU", EnglishName = "Australia"},
...
new Country {Code = "SE", EnglishName = "Sweden"},
...
};
public static Country GetByCode(string code)
{
return Countries.Single(c => c.Code == code);
}
}
অতীতে এই কাজটি করে আমি পালিয়ে গিয়েছি কারণ ডেটা সেট তুলনামূলকভাবে ছোট ছিল এবং অবজেক্টগুলি বেশ সহজ। এখন আমি এমন কিছু নিয়ে কাজ করছি যাতে আরও জটিল অবজেক্ট (প্রতিটি 5 - 10 টি বৈশিষ্ট্য, কিছু বৈশিষ্ট্য অভিধান হিসাবে) এবং প্রায় 200 টি অবজেক্ট থাকবে।
ডেটা নিজেই খুব কমই পরিবর্তিত হয় এবং এটি পরিবর্তিত হয় যখন এটি সত্যিই এমনকি গুরুত্বপূর্ণ হয় না। সুতরাং এটি পরবর্তী প্রকাশিত সংস্করণে ঘূর্ণায়মান পুরোপুরি ঠিক আছে।
আমি আমার ডেটা উত্সকে এমন কিছুতে রূপান্তর করতে টি 4 বা ইআরবি বা অন্য কোনও টেম্প্লেটিং সমাধান ব্যবহার করার পরিকল্পনা করছি যা সমাবেশে স্থিতিশীলভাবে সঞ্চিত থাকে।
আমার বিকল্পগুলি মনে হয়
- এক্সএমএলে ডেটা সংরক্ষণ করুন। এক্সেমিলি রিসোর্স হিসাবে এক্সএমএল ফাইলটি সংকলন করুন। প্রয়োজনীয় হিসাবে ডেটা লোড করুন, পুনরায় ব্যবহারের পারফরম্যান্সের জন্য লোড হওয়া ডেটাটিকে একটি অভিধানে সঞ্চয় করুন।
- প্রারম্ভকালীন সময়ে শুরু হওয়া কিছু স্ট্যাটিক অবজেক্ট বা অবজেক্ট তৈরি করুন।
আমি নিশ্চিত যে আমি বিকল্প 1 এর পারফরম্যান্সের প্রভাবগুলি বুঝতে পেরেছি least কমপক্ষে, আমার কুঁচক এটির দুর্দান্ত অভিনয় নেই।
বিকল্প 2 হিসাবে, আমি কী করব জানি না। .NET কাঠামোর অভ্যন্তরগুলি সম্পর্কে এই তথ্যটি আসলে # # কোডে প্রকৃতপক্ষে সংরক্ষণ করার সর্বোত্তম উপায় এবং এটি শুরু করার সর্বোত্তম উপায়গুলি সম্পর্কে আমি যথেষ্ট জানি না। আমি কীভাবে System.Globalization.CultureInfo.GetCulture(name)কাজ করে তা দেখতে নেট ডাব্লু রিফ্লেক্টরটি ব্যবহার করে ঘুরে দেখলাম , যেহেতু এটি আসলে যা আমি চাই তার সাথে খুব মিল রয়েছে work দুর্ভাগ্যক্রমে এই ট্রেইলটি শেষ হয়েছে extern, সুতরাং কোনও ইঙ্গিত নেই। আমার উদাহরণ হিসাবে, যাওয়ার মতো সমস্ত ডেটা দিয়ে স্থিতিশীল সম্পত্তি শুরু করা কি? অথবা চাহিদার ভিত্তিতে অবজেক্টগুলি তৈরি করা এবং তারপরে এগুলি ক্যাশে করা ভাল?
private static readonly Dictionary<string, Country> Cache = new Dictionary<string,Country>();
public static Country GetByCode(string code)
{
if (!Cache.ContainsKey(code))
return Cache[code];
return (Cache[code] = CreateCountry(code));
}
internal static Country CreateCountry(string code)
{
if (code == "AU")
return new Country {Code = "AU", EnglishName = "Australia"};
...
if (code == "SE")
return new Country {Code = "SE", EnglishName = "Sweden"};
...
throw new CountryNotFoundException();
}
স্থিতিশীল সদস্যে একবারে এগুলি তৈরি করার সুবিধাটি হ'ল আপনি লিনকিউ বা অন্য যে কোনও কিছু ব্যবহার করতে পারেন সমস্ত বস্তুর দিকে নজর রাখতে এবং যদি আপনি চান তবে সেগুলি অনুসন্ধান করতে পারেন। যদিও আমি সন্দেহ করি এটি করার ক্ষেত্রে একটি স্টার্টআপ পারফরম্যান্স পেনাল্টি রয়েছে। আমি আশা করছি কারও সাথে এটির অভিজ্ঞতা আছে এবং তাদের মতামত ভাগ করে নিতে পারেন!