tgoop.com/fullStackDevs/744
Last Update:
#Roslyn
#Performance
🔰 بررسی و معرفی یک نکته پرفورمنسی در شی شارپ
🔹 در نسخه 3.0 سی شارپ Anonymous type ها معرفی شدند.
که بهتون قابلیت نمونه سازی ابجکت های مختلف بدون مشخص کردن تایپ اونها رو میده.
▪️ به کمک این قابلیت و همچنین فیچری که در کامپایلر سی شارپ ( roslyn ) وجود داره می تونید آرایه هایی به شکل زیر تعریف کنید.
var arr = new[]
{
new { Id = 1 , Name = "Anonymous" },
new { Id = 2, Name = "BitBard" }
};
🔸 نکته ای که جالبه بدونید اینکه اگه ارایه بالا به شکل زیر تعریف بشه با کامپایلر ارور مواجه می شین.var arr = new[]
{
new { Id = 1 , Name = "Anonymous" },
new { Name = "BitBard" , Id = 2, }
};
▪️ علت این موضوع برمیگرده به ویژگی type identity کامپایلر برای Anonymous Type ها.
🔹 به این صورت که کامپایلر در مواجه با نمونه سازی یک Anonymous Type در کد (object initializer)، ابتدا نام و نوع پراپرتی ها رو تشخیص میده ( به طور خیلی خلاصه ) و در نهایت برای اون Anonymous type، یک تایپ (class) با نامی که خودش انتخاب میکنه میسازه و از اون نمونه سازی میکنه.
🔸 از نظر کامپایلر Anonymous Type ها دارای یک identical structure هستند که برای تشخیص identical بودن ( یکسان بودن ) دو Anonymous Type باید نام و نوع پراپرتی ها و همچنین ترتیب تعریف شدن پراپرتی های اونها یکسان باشه.
🔸 حتی اگه دو Anonymous Type نام و نوع پراپرتی های اونها یکی باشه اما ترتیب تعریف کردن پراپرتی هاشون موقع نمونه سازی متفاوت باشه، کامپایلر برای هرکدوم از اونها تایپ های متفاوتی generate میکنه.
▪️ به همین خاطره که نمونه کد دوم تعریف آرایه با کامپایل ارور مواجه میشه، چون تمام عناصر ارایه باید از یک نوع باشن.
🔸 رعایت این نکته در نمونه سازی از Anonymous Type ها باعث افزایش پرفورمنس و کاهش مصرف حافظه میشه چون اگه توی یک assembly یک یا چندین Anonymous Type وجود داشته باشه که identical structure باشن، کامپایلر اونها رو از یک نوع تایپ در نظر میگیره و فقط یک تایپ براشون generate میکنه.
@fullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/744