حرفه ای: افزایش سرعت پیمایش دیتاست ADO

ساخت وبلاگ

دوشنبه 20 آذر 1396, 14:33 عصر #1

Question افزایش سرعت پیمایش دیتاست ADO

با درود ...
من یک بخشی در سیستم امکان Export دارم که بنا بر درخواست های چندین ساله امکانات خاص زیادی داره. یک ازونها این هست که بطور مثال در خروجی گرفتن برای اکسل کاربر میتونه یک کوئری رو که دیتاست مربوط به اون طبق کوئری مثلاً 5 تا فیلد داره رو بیاد یک نگاشت (Map ) ایجاد میکنه و لا به لای فیلدهای Select شده فیلدهای دلخواه ( تغییر ردیف و اولویت نمایش فیلد ، متن دلخواه ، Delimiter ، فرمول اکسل و غیره ...) اضافه میکنه. یعنی خروجی نهایی ممکنه با اونچه که در Select بوده متفاوت باشه و در RunTime باید خروجی رو اصلاح کرد و همزمان در فایل (بطور مثال اکسل) نوشت ، برای پیاده سازی این مورد با توجه به اینکه همه ی موارد خواسته شده از کاربرا رو نمیشد در SQL پیاده کرد مجبور شدم کوئری رو اجرا کنم وموقع نوشتن در فایل تغییرات رو انجام بدم .
در حلقه ای که از دیتای اصلیِ برگشته از کوئری دارم برای هر رکورد دیتا باید کل جدول نگاشت بررسی و اعمال بشه و دلیلش هم این هست که در نوشتن در خروجی (بطور مثال اکسل ) خروجی رکورد به رکورد درج میشه که Map رو در یک لیست نگهداشتم و این بخش بسیار سریع عمل میکنه اما پیمایش خود دیتاستِ شامل دیتا کند هست.

سوالم این هست که برای پیمایش و Pars کردن رکورد به رکورد دیتاست چه روشی سریع ترین و به اصطلاح best practice هست؟
چه راه حلی وجود داره که سرعت رو افزایش بدم؟

از Recordset به جای دیتاست استفاده کردم و DisableControls هم کردم اما اینا کافی نیست و اگر Pars رکورد به رکورد اتفاق نیفته بطور مثال برای 140000 رکورد کسری از ثانیه Export میگیره ولی با بررسی رکور به رکورد میشه 25 دقیقه...!
در صورتیکه هر بررسی و در واقع هر دور حلقه ی اصلی هم در کسری از میلی ثانیه داره اتفاق میفته اما کل کار بشدت کند میشه...

پیشاپیش سپاس...


دوشنبه 20 آذر 1396, 16:38 عصر #2

نقل قول: افزایش سرعت پیمایش دیتاست ADO

سلام.
روی دیتاست رویدادهایی مثل OnCalc یا AfterScroll دارید؟
روی گرید رویدادی دارید؟
فیلد لوکاپ روی دیتاست دارید؟
روی فیلدهاتون GetText دارید؟
فیلد بلاب دارید؟
این ها رو جواب بدید تا بعد ..
توابع تبدیل تاریخ با دقت 5000 سال
پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/
نرم افزار پخش مویرگی

دوشنبه 20 آذر 1396, 18:02 عصر #3

نقل قول: افزایش سرعت پیمایش دیتاست ADO

روی دیتاست رویدادهایی مثل OnCalc یا AfterScroll دارید؟
خیر...
روی گرید رویدادی دارید؟
دیتاست فقط Data Container هست و به گرید متصب نیست.
فیلد لوکاپ روی دیتاست دارید؟
خیر
روی فیلدهاتون GetText دارید؟
خیر...
فیلد بلاب دارید؟
خیر... تمام فیلدها String هستند.

نکته : تنها فانکشنی که در چند جای عملیات (در هر loop حلقه 2 بار یکبار برای چک Nil بودن و یکبار هم برای چک دیتاتایپ فیلد مذکور) اتفاق میفته FindField هست که اونم واقعاً زمانی نمیبره وقتی trace میکنم.


برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 155 تاريخ : دوشنبه 20 آذر 1396 ساعت: 20:38