نکته ای در خصوص بهبود پرفورمنس کوئری های LINQ
در دات نت فقط وقتی واقعا دستورات لینک اجرا و محاسبه میشه که داده هاش محاسبه شده و دسترس پذیر باشه. یعنی اگر از خط اول بلاک متد مثال متد ToList رو من حذفش کنم به ازای فراخوانی متد Count یکبار و به ازای فراخوانی متد Avererage یک بار متغیر result محاسبه میشه. به این رفتار در دات نت میگن deferred execution.
تصور کنید در کوئری های پیچیده و سنگین با محاسبات و روابط زیاد اگر ارتباط با دیتابیس هم دخیل کنیم چقدر روی پرفرومنس ما موثر خواهد بود!
public void MyComponentLegacyMethod(List<int> masterCollection) { //Without the ToList this linq query will be executed twice because of the following usage var result = masterCollection.Where(i => i > 100).ToList(); Console.WriteLine(result.Count()); Console.WriteLine(result.Average()); }
نکته
Using Deferred Execution While Writing LINQ Queries
نویسنده : محمد ملک مکان
شنبه 12 دی 1394
شنبه 12 دی 1394