کار با Expression Tree در سی شارپ
308, PermanentRedirect
https://tyrrrz.me:443/blog/expression-trees/ icon


میشه گفت یکی از advanced‌ترین قسمت‌های دات نت، مفهوم Expression Tree و کلاس Expression هست که یه جورایی قلب IQueryable رو هم تشکیل میده

شاید نهایت استفاده افراد، کار با <<Expression<Func برای شرط‌های predicate بر روی متد Where و یا selector برای متد Select باشه

ولی Expression خیلی بزرگتر از اینهاست 

توضیح مفهوم Expression Tree طولانیه اگه میخواین بیشتر باهاش اشنا بشین قبلا اینجا یه پست نوشتم براش.

لینک اشتراک جاری هم یکی از بهترین مقالاتی که این مفهوم رو به خوبی به همراه مثال توضیح داده

کار با Expression Tree در سی شارپ
معرفی کتابخانه FastMember برای کار با Reflection
200, OK
https://github.com/mgravell/fast-member icon

خیلی از مواقع ما نیاز داریم از Reflection استفاده کنیم اما Reflection به خودی خود نسبت به حالی عادی خیلی کندتر هست و نیاز به نوشتن کد‌های بیشتری دارد.

برای سرعت بیشتر و استفاده راحت‌تر از Reflection میتونین از کتابخانه FastMember استفاده کنین. (بین تست‌های که شخصا داشتم تو سناریو‌های مختلف، FastMember بین 6 تا 96 برابر سریعتر از Reflection معمولی سریع‌تر بود.)

مثلا برای دسترسی به property‌های یک object در runtime با کمک FastMember، خواهیم داشت:

var accessor = ObjectAccessor.Create(obj);
var propName = "MyProperty"
var value = accessor[propName];

نکته :

این کتابخانه کد‌ها IL برنامه رو در runtime تغییر میده، در نتیجه در محیط‌های AOT (مخفف Ahead of Time) مانند Xamarin iOS کار نخواهد کرد.


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

سپس به روش‌های افزایش پرفرمنس رفلکشن اشاره میکنه و در آخر بنچمارکی از نتیجه اونها رو نشون میده

Why Reflection Is Slow  

معرفی کتابخانه FastMember برای کار با Reflection
کلاس های Generic در خدمت Performance
200, OK
https://virgool.io/@mostafavakily/%DA%A9%D9%84%D8%A7%D8%B3-%D9%87%D8%A7%DB%8C-generic-%D8%AF%D8%B1-%D8%AE%D8%AF%D9%85%D8%AA-%D9%BE%D8%B1%D9%81%D9%88%D8%B1%D9%85%D9%86%D8%B3-pkiaddyglrdh icon

چطوری از ترکیب کلاس‌های Generic و Reflection میتونیم ساختاری درست کنیم که پروسه خوندن مقادیر داخل Attribute‌های مربوط به یک کلاس رو خیلی سریع و در حد صدا زدن یه متد از همون کلاس سریع کنیم

کلاس های Generic در خدمت Performance
نمونه ای از Reflection deserialization and custom attributes
301, MovedPermanently
http://www.codeproject.com/Articles/1079324/Reflection-deserialization-and-custom-attributes icon

So, last week one of my colleagues wanted to serialize an object along with custom property attribute to JSON. Interesting… JSON.NET by default will not allow serializing custom property attribute. So, you have to write custom JSON converter to fix this. Let’s take a look at how 

نمونه ای از Reflection deserialization and custom attributes