راهکار بهینه نویسی و سرعت در ارتباط با دیتابیس
سلام و درود
من برنامه ای سالها پیش نوشتم که در اون از کامپوننتهای FireDoc که TFDConnection و TFDTable و TFDQuery استفاده کردم
(دلفی - پلتفرم ویندوز - دیتابیس - MySQL - اتصال مستقیم به دیتابیس)
در ابتدا Ado را کانکت میکنم و با هر مرحله ورود کاربرم به مرور تیبیلها هم کانکت میکنم و در مواقع لزوم از کوئری ها استفاده میکنم و بعد استفاده کلوزش میکنم
________
حالا که برنامه بزرگ شده و تحت اینترنت استفاده برخی کاربرها میخوان به دیتابیس وصل باشن برخی رفتارها که روی لوکال اصلا اهمیتی نداشت به چشم میاد و برخی فرمها چند ثانیه طول میکشه تا باز بشه و دستورات اجرا بشه
________
حالا میخوام برنامه بهینه سازی کنم
اول اینکه نظرم این بود که کل تیبیلها رو کانکت نکنم در رویداد باز شدن هر مسیر بنا به نیاز اونو مستقیم کال کنم.
2- برخی اطلاعات که تغییر لحظه ای ندارن پس از خوندن از دیتابیس روی قسمتی از برنامه مثلا مانند یک لیبل مخفی قرار بدم تا هربار کال نکنم
3- تقریبا چیزی پیدا نکردم که بشه استورپروسیجر کنم ولی اگه شد ازش استفاده کنم
دنبال راهکارهای بیشتری هستم حتی خود کامپوننت های VCL که استفاده کردم هم سنگین کردن در استفاده از اونها هم باید تجدید نظر کنم
مثلا متغیرهای محلی هم نیاز به فری کردن داره من اینو هیچ وقت انجام نمیدم
چه اصولی رو شما رعایت میکنید؟ چه کاری در نحوه تنظبمات اتصال میشه انجام داد؟
ممنون میشم اطلاعات خودتونو در زمینه اتصال + VCL + درگیر شدن حافظه و هر چیزی که به سبک نوشتار و تنظیمات اصولی میشه با ما در میان بگذارید
سپاس
نقل قول: راهکار بهینه نویسی و سرعت در ارتباط با دیتابیس
سلام.
من تجربیات خودمو می گم ببینید کدوم به درد شما می خوره:
اول از همه استور پروسیجر کردن مهمه
یکی از کارهایی که می شه کرد اینه که لود دی بی لوکاپ کمبو ها و سایر عناصر اینطوری رو بصورت ایجکس انجام بدید (روی وب مد نظرمه) یعنی مثلا 10 تاشو نشون کاربر بدید، اگر بین اونا نبود بیاد سرچ کنه و هربار ده تای دیگه رو ببینه که لود تایم فرم کلی پایین میاد
نمایش دیتا روی گرید رو هم صفحه بندی کنید
از ادوتیبل استفاده نکنید و به جاش از ادوکوئری با فیلتر های مناسب استفاده کنید
هنگام لوپ زدن روی دیتاست حتما دیزیبل کنترل کنید
از رکورد نو استفاده نکنید
از یک کانکشن فعال استفاده کنید و تمام اشیا رو به اون مرتبط کنید
هیچ وقت تراکنش سمت کلاینت ننویسید
هنگام آپدیت کردن تیبل، حتما شرط بگذارید مثلا اگر فیلد اکتیو همه رو میخواهید ترو کنید، بگید اونایی که فالس هستن ترو بشن! همین یه نکته یک کوئری من رو از 20 دقیقه آورد رو 3 ثانیه
برخی پارامتر های اولیه رو همون اول کار که لود کردید نگهش دارید تو یک سری رکورد ها یا حتی کلاینت دیتاست و مموری تیبل، مثل مشخصات شرکت، تقویم کاری، دسترسی های یوزر جاری و غیره
ایندکس گذاری مناسب روی جداول فراموش نشه
گاهی کانکت کردن های متوالی خیلی بیشتر طول می کشه تا نگه داشتن کانکشکن
روی اشیای ادو در رویداد های OnCalc OnAfterScroll OnOpen و این طور چیزها تا می شه کد مرتبط با دی بی ننویسید
روی شی دیتاسورس در رویدادهاش کلا چیزی ننویسید مگر اینکه خیلی لازم باشه
اگر دیتا برای نمایش روی گرید نیست و پشت قضیه استفاده می شه و ردیف های زیادی هم داره، می تونید از حالت ForwardOnly استفاده کنید
کلا از انتقال دیتای زیاد سمت کلاینت پرهیز کنید
فقط فیلدهای مورد نیازتون رو در سلکت قرار بدید
.
.
خیلی نکات ریز دیگه ای هم هست که تو کار درمیاد، نتیجه کار و تجربه هاتون رو زیر همین پست ادامه بدید :تشویق:
نقل قول: راهکار بهینه نویسی و سرعت در ارتباط با دیتابیس
احسنت یوسف .
مهمترین تجربه من این بود که اصلا از ado استفاده نکنم . بجاش firedac یا unidac