PDA

View Full Version : مشکل در کند شدن برنامه



combo_ci
دوشنبه 25 تیر 1386, 11:59 صبح
سلام دوستان
من یه برنامه واسه یه کارخونه نوشتم .اولش خیلی خوب کار میکرد اما با زیاد شدن تعداد رکورد ( حدود 4000 رکورد )ها کم کم سرعت برنامه مخصوصا تو لود دیتا گرید ها خیلی کم شده .

میشه راهنماییم کنین که چه کار کنم سرعتش بیشتر شه . فکر میکنم تو اس کیو ال هم باید راههایی برای سریع شدن سرعت QUERY ها وجود داشته باشه.

MajerajooyeKhallagh
دوشنبه 25 تیر 1386, 12:39 عصر
سلام دوستان
من یه برنامه واسه یه کارخونه نوشتم .اولش خیلی خوب کار میکرد اما با زیاد شدن تعداد رکورد ( حدود 4000 رکورد )ها کم کم سرعت برنامه مخصوصا تو لود دیتا گرید ها خیلی کم شده .

میشه راهنماییم کنین که چه کار کنم سرعتش بیشتر شه . فکر میکنم تو اس کیو ال هم باید راههایی برای سریع شدن سرعت QUERY ها وجود داشته باشه.

دوست عزیز

یک راه حل که وجود داره(به غیر از بالا بردن Performance در سطح دیتابیس از طریق بهینه سازی کواری ها)اینه که:
شما میتونید به جای اینکه کل داده ها را بیارید و در دیتاست در سطح Client قرار بدید,صفحه به صفحه اطلاعات را لود و در گرید و در صفحه مربوطه نشان دهید(برای این کار کافیست یک sp بنویسید که ورودی آن شماره صفحه و تعداد رکوردهای نمایش داده شده در هر صفحه باشد مثلا در هر صفحه 10 رکورد اگر نمایش داده شود و بخواهید صفحه سوم نمایش داده شود, شما باید 3 و 10 را به عنوان ورودی های Sp به آن پاس بدهید)

میتوانید از کد زیر به عنوان نمونه استفاده کنید


createproc LoadDataPerPage
@pageNo tinyint,
@RowInPerpages smallint
as
select*from(
Select Row_number()Over(Orderby CustomerID)as Rank
,CustomerID
From Customers)Temp
Where Rank between(@RowInPerpages * @pageNo)-@RowInPerpages+1 and(@RowInPerpages * @pageNo)

asar_001
سه شنبه 26 تیر 1386, 17:05 عصر
معمولا این مشکل مال داشتن select های تودر تو در برنامه است مخصوصا اگه روی شبکه باشه
query ها را با هم join کردی؟

combo_ci
سه شنبه 26 تیر 1386, 20:15 عصر
اره استفاده کردم اما فکر میکنم کنم اشکال از اون نباشه:افسرده: .میتونین منو راهنمایی کنید که چه طوری میشه با ایندکس کردن روی table ها سرعت query ها رو زیاد کرد..................یا با threading چه طوری میشه این کارو کرد؟

hdv212
سه شنبه 26 تیر 1386, 22:50 عصر
ببینم شما از DataSet استفاده کردی یا از DataReader ؟ اگه از دیتاست استفاده کردی، به دیتاریدر تغییر بده، به طور قابل توجهی سرعت لود اطلاعات بالا میره.

combo_ci
چهارشنبه 27 تیر 1386, 17:51 عصر
ببینید من فکر میکنم dataset یا datareader یا datatable ..... توی شبکه های گیگ (که سرعتشون خیلی بالاست زیاد فرقی نمیکنه....حالا نمیدونم توی ذخیره اطلاعات باید قانون خاصی رو رعایت کرد که سرعت بازیافتش زیاد باشه ......یا اینکه اون طرف قضیه یعنی sql server تنظیماتی داره که میشه سرعت رو افزایش داد:اشتباه:

danial82
جمعه 13 اردیبهشت 1387, 12:07 عصر
احتمال قوی از dataset استفاده کردی به dataReader تبدیل کن مشکلت حل میشه منم چنین مشکلی داشتم این کارو کردم حل شد
dataset برای 750 رکورد از dataReader سریعتر است ولی بیشتر از این تعداد رکورد dataReader به مراتب سریعتر است.
ایندکس هم روی ستونهایی از جدول که عمل join روشون انجام میشه میتونه تاثیر زیادی روی سرعت داشته باشه

e-shahshahani
جمعه 13 اردیبهشت 1387, 20:51 عصر
اگه با 4000 رکورد به مشکل خوردی، طراحی ات هم سمت sql و هم سمت #c مشکل اساسی داره.

danial82
شنبه 14 اردیبهشت 1387, 07:30 صبح
براي تائيد حرفم تو پست قبل تو اين برنامه بخوبي ميتوانيد سرعت DataReader و DataSet را بر حسب تعداد ركورد بينيد و مقايسه كنيد

danial82
شنبه 14 اردیبهشت 1387, 07:50 صبح
میتوانید از کد زیر به عنوان نمونه استفاده کنید


createproc LoadDataPerPage
@pageNo tinyint,
@RowInPerpages smallint
as
select*from(
Select Row_number()Over(Orderby CustomerID)as Rank
,CustomerID
From Customers)Temp
Where Rank between(@RowInPerpages * @pageNo)-@RowInPerpages+1 and(@RowInPerpages * @pageNo)


اين تيكه كد براي SQL 2005 درسته?

hassan razavi
شنبه 14 اردیبهشت 1387, 10:39 صبح
دوست عزیز Fill کردن یک Datagrid با 4000 رکورد کمکی به کاربر شما نخواد کرد. چون جستجو در بین 4000 ردیف برای پیدا کردن چیز خاصی بسیار کار دشواریست. بهتره که در اون فرمتون امکانات جستجو رو افزایش بدید و کاربر رو مجبور کنید که با انجام جستجو جهت یافتن رکورد مورد نظرش ، تعدا رکوردهای برگشتی شما رو کمتر کنه

MajerajooyeKhallagh
پنج شنبه 07 آذر 1387, 12:01 عصر
بله درسته,دوست عزیز ,شما ایرادتون در کجاست؟