سرعت پاینن Fill کردن دیتا گرید با select تو در تو در linq
سلام.
وقتی میخوام از فیلد یک جدول دیگر با else ، if سرعت لود داده ها بسیار پایین میاد.
آیا طریقه کد نویسی بنده درسته؟
اینو برای مثال ببینید:
var select = db.TBL_Names.OrderByDescending(f => f.Id).ToList().Select((c, index) => new {
c.Id,
RowIndex = index + 1,
Test = !c.Table2s.Any()
? "is valid"
: c.Table2s.OrderByDescending(d => d.Id)
.FirstOrDefault()
.Bool.Choose("is valid",
true, "invalid",
false, "is valid"),
});
dgv.DataSource = select;
نقل قول: سرعت پاینن Fill کردن دیتا گرید با select تو در تو در linq
سلام
بله، به نظر میاد کار شما درست نیست.
اول این که وقتی به حالت c.Table2s استفاده میکنی سرعت پایین میاد. خودت Join کن.
دوم این که ToList باعث اجرای query و آمدن اطلاعات به حافظهی کامپیوتر میشه.
برای حداکثر سرعت باید فقط یک ToList در آخر کار داشته باشی. یعنی درست جایی که دیگه
نیازی به دیتابیس نداری.
صبا صبوحی
نقل قول: سرعت پاینن Fill کردن دیتا گرید با select تو در تو در linq
نقل قول:
نوشته شده توسط
SabaSabouhi
سلام
بله، به نظر میاد کار شما درست نیست.
اول این که وقتی به حالت c.Table2s استفاده میکنی سرعت پایین میاد. خودت Join کن.
دوم این که ToList باعث اجرای query و آمدن اطلاعات به حافظهی کامپیوتر میشه.
برای حداکثر سرعت باید فقط یک ToList در آخر کار داشته باشی. یعنی درست جایی که دیگه
نیازی به دیتابیس نداری.
صبا صبوحی
سپاسگذارم از پاسخ شما.
اگر در آن قسمت از ToList استفاده نکنم حتما با خطای زیر روبرو میشم:
Unsupported overload used for query operator 'Select'.
ولی اینبار بنده ToList را حذف نمودم و بجای آن از AsEnumerable
استفاده نمودم.
تاثیر محسوسی مشاهده نشد!
حالا Join هم امتحان میکنم.
اگر بازهم راهی بنظرتون میرسه سپاسگذار میشم پاسخ دهید...:لبخند:
نقل قول: سرعت پاینن Fill کردن دیتا گرید با select تو در تو در linq
سلام.
مشکل رو برطرف کردم.
دوستانی که مثل بنده یروزی به چنین مشکلاتی برخورد کردند.
بجای استفاده از عبارتهای lambda از query لینک استفاده کنید ، که سرعتش بسیار بالاست...
موفق باشید
نقل قول: سرعت پاینن Fill کردن دیتا گرید با select تو در تو در linq
سلام
دوست من دو تا پست زدی که برای هر دو باید چیزهایی رو بگم.
1. ToList و AsEnumerable فرقی ندارن. هر دو از دیتابیس اطلاعات رو میخونن.
من نمیدونم دقیقاً میخوای چیکار کنی. اما راه داره که مجبور نشی بری سراغ Db.
من خودم یه جاهایی در شرایط پیچیده این مشکل رو داشتم، وقت گذاشتم و مشکل رو حل کردم.
2. استفاده از query لینک مشکل شما رو حل کرده، چون همون اتفاقی افتاده که من گفتم. یعنی فقط
یکبار رفتی سراغ دیتابیس.
با Lambda هم میتونی همین کار رو انجام بدی، فقط راهش رو پیدا کن.
در پایان Lambda و LinQ query هر دو یک کار میکنن. هر کدوم رو که راحتتر هستی انجام بده
من Lambda رو ترجیح میدم چون
* خیلی سریعتر میتونم بنویسم
* خیلی خواناتر هست.
این خوانا بودن خیلی اهمیت داره. بخصوص وقتی که بعد از 1 سال کنار گذاشتن پروژه مجبور بشی یک تغییر توش بدی.
اونجا هست که خوانا بودن ارزشش معلوم میشه. یا این که یک نفر دیگه بخواد این کار رو انجام بده.
صبا صبوحی