PDA

View Full Version : (مقاله)- استفاده از خصوصیات Recordset برای افزایش سرعت



حمیدرضاصادقیان
جمعه 18 آبان 1386, 11:46 صبح
سلام دوستان.من این مقاله رو دیدم خودم تست کردم سرعتش وحشتناک تغییر میکنه و خیلی عالیه.فقط تنها ایرادی که هست اینه که وقتی داده ها رو در گرید نمایش میده فقط اولین رکورد رو نمایش میده و هنگامی که Scroll میکنی تا ردیفهای بعد رو ببینی بقیش رو نمایش میده.

http://dn.codegear.com/article/27790

Valadi
جمعه 18 آبان 1386, 12:05 عصر
این هم نسخه PDF این مقاله

vcldeveloper
جمعه 18 آبان 1386, 16:12 عصر
وقتی داده ها رو در گرید نمایش میده فقط اولین رکورد رو نمایش میده و هنگامی که Scroll میکنی تا ردیفهای بعد رو ببینی بقیش رو نمایش میده.
بجای استفاده مستقیم از RecordSet، از DisableControls و EnableControls استفاده کنید:


DataSet.DisableControls;
try
while not DataSet.Eof do
begin
// Do something
DataSet.Next;
end;
finally
DataSet.EnableControls;
end;

حمیدرضاصادقیان
شنبه 19 آبان 1386, 08:17 صبح
ممنون.ولی آقای کشاورز توی همین مقاله همین چیزی که شما گفتین رو نوشته من هم تست کردم ولی سرعت اولی رو نداره.اگر توی همون مقاله هم نگاه کنید دو نفر پست کردند و دقیقا گفتند که با موردی که شما گفتید سرعت اولی رو نداره.
ولی در همون جا گفته میتونی از resync استفاده کنی.تا این مشکل حل بشه.

vcldeveloper
شنبه 19 آبان 1386, 19:55 عصر
من امروز یه تست انجام دادم روی 100 هزار رکورد. سرعت AdoQuery با AdoDataSet خیلی فرق نمیکنه، بخصوص وقتی کوئری بیش از یک بار اجرا میشه. وقتی بررسی کردم دیدم استفاده از RecordSet حدودا دو برابر سرعت رو بیشتر میکنه، اما نکته ایی که برام عجیب بود تاثیر استفاده از DisableControls بود. من تا قبل از این فکر می کردم که DisableControls فقط زمانی روی کارایی تاثیر میزاره که حتما یک DataSource به DataSet وصل باشه، ولی با این تست متوجه شدم که بدون توجه به اینکه DataSource ایی به DataSet وصل باشه، DisableControls به میزان فوق العاده ایی روی سرعت کوئری تاثیر میزاره (در تست من روی 100 هزار رکورد، تفاوت در حد چند صد برابر بود!!).
نکته جالب دیگه کارایی CoreLab SDAC بود. جدای از اینکه این مجموعه کامپوننت امکانات بیشتری نسبت به سایر کامپوننت های دلفی برای اتصال به SQL Server ارائه میده، کارایی اون هم در صورت استفاده از DisabledControls حدود دو و نیم برابر و در صورت استفاده نکردن از DisabledControls حدود 4 برابر بیشتر از کامپوننت های ADO بود. کارایی SDAC تقریبا دو برابر ADO در زمان استفاده از RecordSet بود.

حمیدرضاصادقیان
دوشنبه 21 آبان 1386, 07:49 صبح
ممنون.ولی اقای کشاورز میشه کدی که برای استفاده از disablecontrol نوشتین رو اینجا قرار بدین؟
اخه من هرکاری کردم بازهم فایده ای نداشت.یعنی کوچکترین تاثیری نکرد.

dkhatibi
دوشنبه 21 آبان 1386, 21:02 عصر
اخه من هرکاری کردم بازهم فایده ای نداشت.یعنی کوچکترین تاثیری نکرد.
رکورداتون شاید حیلی زیاد نیست

vcldeveloper
دوشنبه 21 آبان 1386, 23:12 عصر
میشه کدی که برای استفاده از disablecontrol نوشتین رو اینجا قرار بدین؟


StartTime := GetTickCount;
AdoDataSet1.DisableControls;
try
AdoDataSet1.Open;
while not AdoDataSet1.Eof do
begin
AdoDataSet1.Next;
end;
finally
AdoDataSet1.EnableControls;
Duration := GetTickCount - StartTime;
Memo1.Lines.Add('AdoDataSet: ' + IntToStr(Duration));
AdoDataSet1.Close;
end;

dkhatibi
سه شنبه 22 آبان 1386, 06:10 صبح
DisableControls و EnableControls چه کاری انجام می دهند؟

Saeid59_m
سه شنبه 22 آبان 1386, 07:12 صبح
DisableControls و EnableControls چه کاری انجام می دهند؟
زمانی که شما با یک کوری کار می کنید و فرض بر این بگیرید که به DbGrid‌متصل باشد با انجام هر تغییر روی کوری کنترل هایی که به اون وصل هستند هم به روز می شوند . با این کار شما قبل از انجام عملیات ارتباط کنترل ها رو با کوری قطع کرده و بعد از انجام عملیات اونها را مجدداً به کوری وصل می کنید . اینطوری سرعت بالاتر می ره .

nilidelphi
شنبه 30 بهمن 1389, 17:58 عصر
با سلام خدمت دوستان
من این تاپیک رو از اول دنبال کردم ولی چیزی که متوجه نشدم این بود که آیا این روش موقعی است که شما مستقیم از دستورات اس کیو ال در یک کوئری استفاده کرد و open کرد یا از یک دیتاست استفاده کرد و رکورد هارو یکی یکی پیمایش کرد؟
بنظر شما استفاده ی مستقیو از یک دستور اس کیو ال پرسرعت تر از پیمایش یک دیتاست نیست؟
من این روش رو تو یک جدول 160هزاری با 12 فیلد در SQL Server2000 امتحان کردم تفاوت سرسام آور بود.

خوب به نظرتون نوع DBMS هم بر سرعت جستجو قابل چشم پوشیه؟؟؟؟

a_mosavian
پنج شنبه 25 فروردین 1390, 00:26 صبح
نکته جالب دیگه کارایی CoreLab SDAC بود. جدای از اینکه این مجموعه کامپوننت امکانات بیشتری نسبت به سایر کامپوننت های دلفی برای اتصال به SQL Server ارائه میده، کارایی اون هم در صورت استفاده از DisabledControls حدود دو و نیم برابر و در صورت استفاده نکردن از DisabledControls حدود 4 برابر بیشتر از کامپوننت های ADO بود. کارایی SDAC تقریبا دو برابر ADO در زمان استفاده از RecordSet بود.
من یک برنامه دارم که ADO نوشتم. توصیه می کنید که به SDAC مهاجرت کنم؟ و اینکه نظرتون درباره UniDAC چیه؟