ورود

View Full Version : مشکل در صفحه بندی با PagedList



HOSSEINONLINE7
یک شنبه 19 مرداد 1393, 10:20 صبح
سلام من از این Helper برای صفحه بندی استفاده کردم ولی یک مشکلی هست .

قسمتی که باید پست ها را بهش بدیم تا صفحه بندی انجام بشه کل پست ها از دیتابیس باید Select بشه و زمانی این مشکل ساز میشه که تعداد پست ها خیلی بالا بره که ممکنه فشار زیادی به سرور بیاره و کارایی پایین میاد .

var model = new PostViewModel();

var posts = blpost.Select().ToList();

var pageNumber = page ?? 1;

var onePageOfPost = posts.ToPagedList(pageNumber, 5);

model.Post = onePageOfPost.ToList();

ViewBag.OnePageOfPosts = onePageOfPost;

میخواستم از () Take و () Skip برای انتخاب چند پست مورد نیاز استفاده کنم ولی نشد .

چکار کنم صفحه بندی داشته باشم و Performance هم پایین نیاد ؟

اگر هر دفعه بخوام برای 5تا پست 500 تا پست را از دیتابیس بخونم که سرور Down میشه .

hakim22
یک شنبه 19 مرداد 1393, 10:56 صبح
بجای IList و IEnumerable از IQueryable استفاده کنید. این اینترفیس Lazy Load هست و سرعت را بهینه میکند.

در واقع اون چیزی که وقتگیره قسمت ToList شما هست. چون این دستور باید اطلاعات کامل اشیا را از دیتابیس به درون حافظه ی سرور میکشه . یعنی لیست قابلیت Lazy Load نداره و اشیا رو با همه ی ارتباطهایی که دارند کامل دانلود میکنه.

HOSSEINONLINE7
یک شنبه 19 مرداد 1393, 12:49 عصر
بجای IList و IEnumerable از IQueryable استفاده کنید. این اینترفیس Lazy Load هست و سرعت را بهینه میکند.

در واقع اون چیزی که وقتگیره قسمت ToList شما هست. چون این دستور باید اطلاعات کامل اشیا را از دیتابیس به درون حافظه ی سرور میکشه . یعنی لیست قابلیت Lazy Load نداره و اشیا رو با همه ی ارتباطهایی که دارند کامل دانلود میکنه.

من توی متد Select در Repository از IQueryable استفاده کردم ولی باز کل پست ها یکدفعه لود میشن !

ببینید من الان توی دیتابیس 30 پست دارم و وقتی به :

var posts = blpost.Select().ToList();

میرسه همش را میریزه تو Post .

حالا من این Helper را چکارش کنم که لازم نباشه تمام پست ها یکدفعه لود بشه ؟

hakim22
دوشنبه 20 مرداد 1393, 11:41 صبح
در پست قبلی هم گفتم که هر جا شما از دستور ToList استفاده کنید اثر Lazy Load از بین میرود. از این متد استفاده نکنید.

HOSSEINONLINE7
سه شنبه 21 مرداد 1393, 12:15 عصر
در پست قبلی هم گفتم که هر جا شما از دستور ToList استفاده کنید اثر Lazy Load از بین میرود. از این متد استفاده نکنید.

خوب از چه متدی جایگزینش میشه استفاده کرد ؟

HOSSEINONLINE7
چهارشنبه 22 مرداد 1393, 16:38 عصر
خوب از چه متدی جایگزینش میشه استفاده کرد ؟

دوستان شما چطور از این Helper استفاده میکنید ؟ لطفا راهنمایی کنید .