PDA

View Full Version : کندی سرعت در دلفی



scarlet_yekta
شنبه 15 آذر 1393, 13:56 عصر
سلام خدمت دوستان برنامه نویس
دوستان آیا شما تو تجربیاتتون به این مورد رسیده اید که استفاده از دیتاماژول های زیاد در دلفی باعث میشه وقتی برنامه تو شبکه داره اجرا میشه کندی سرعت خیلی زیادی داشته باشید؟

اگر تو طراحی جداول دیتابیس مشکلی نباشه منظورم اینه که افزونگی نباشه و ایندکس گذاریها درست باشه و...
تو برنامه دلفی هم اکثر دستورات را به صورت استورپروسیجر به اسکیوال فرستاده که این هم باید نکته مثبتی باشه
به نظر و تجربه شما چه چیزی باعث کندی سرعت میشه؟
منتظر راهنماییتون هستم

BORHAN TEC
شنبه 15 آذر 1393, 14:37 عصر
با سلام،
عوامل خیلی زیادی میتونه باعث کندی بشه که برای موارد خاص باید بررسی بشه مثل دسترسی های زیاد و بی مورد به دیسک، استفاده بی رویه و نادرست (بحث آزادسازی حافظه و ...) از حافظه، بکار بردن الگوریتمهای نامناسب، مثلاً اگر در شبکه تعداد کاربران زیاد باشه و برنامه تحت ویندوز باشه باید در سمت سرور از http.sys به جای سرورهای Thread base استفاده بشه. از عوامل دیگه میشه به بی توجهی به برخی از مباحث فنی اشاره کرد، مثلاً برنامه های 32 بیتی که در ویندوز 64 بیتی اجرا میشوند کارایی و سرعت بسیار پایینی دارند و بسیاری از مسائل دیگه... :متفکر:
در خصوص برنامه های بانک اطلاعاتی هم مسائل مختلفی میتونه دخیل باشه مثل درست ننوشتن SP ها، ایندکسهای اشتباه(معمولاً بهتره روی فیلدهایی ایندکس بگذاریم که در قسمت Where و Order by و Group by مورد استفاده قرار می گیرند). توجه داشته باشید که همیشه نرمال سازی سرعت رو بالا نمیبره بلکه گزارش گیری رو راحت میکنه. توجه داشته باشید که در مواردی که نرمال سازی رو انجام میدیم برای بدست آوردن اطلاعات مورد نیاز باید از Join های مختلفی استفاده کنیم، با این حال نرمال سازی جداول یک کار اصولی و مهم هست که حتماً باید انجام بشه. :متفکر:

joker
شنبه 15 آذر 1393, 18:41 عصر
یکی از مواردی که در دیتاماژول ممکنه موجب کندی بشه اسنپ شات دانلودی هست که بر اساس کوئری پیش فرض select * from table ممکنه رخ بده
اگه این مورد را رعایت کنید( یعنی درخواست شما تعداد محدودی رکورد را براتون از سرور بگیره) چه در حالت تحت شبکه چه تک کاربره لوکال هیچ کندی سرعتی در استفاده از بینهایت دیتاماژول نخواهید داشت
حالا موارد بالا هم که دوستمون گفتند باید رعایت کنید چون هر درخواست باید بره سمت سرور و پردازش بشه و بیاد ، اگه طراحی دیتابیس اشتباه باشه زمان پردازش و جوابگوئی سرور هم کندتر میشه و این مستقیم سمت کلاینت مشهود میشه.

یوسف زالی
شنبه 15 آذر 1393, 22:36 عصر
در مورد نرمال سازی:



توجه داشته باشید که همیشه نرمال سازی سرعت رو بالا نمیبره بلکه گزارش گیری رو راحت میکنه.

دقیقا برعکسه!! در گزارشاتی که نیاز به بار خیلی شدید دارند، دقیقا آنرمال سازی پیشنهاد می شه. در خصوص سیستم های MIS سرچی بزنید.
کلا نرمال سازی زیاد ربطی به سرعت نداره، یعنی رسالتش سرعت دادن نیست اصلا.

در خصوص سرعت، همونطور که شاهین و جوکر هم گفتند، این ها رو در نظر بگیرید:
طراحی درست جداول از نظر نوع های درست، ایندکس های خوب، طول صحیح فیلد ها، و در نهایت فایل بندی مناسب
ساخت درست و اصولی کوئری ها و اس پی ها، به حداقل رسوندن دستورات تجمعی مثل Group by و دستورات جانبی که منجر به استفاده غیر مستقیم از گروه بندی می شه مثل Row_Number، استفاده از Union All به جای Union، ذکر فیلد های درست در join ها، به حداقل رسوندن TVF ها، و هزاران مورد ریز دیگر
داشتن فقط و فقط یک ADOConnection
استفاده می نیمم از جداول موقتی، کانکشن های موقتی و ...
استفاده از مود های مناسب در CursorType و LockType و CursorLocation برای گزارشات و Data Entry
انداختن محاسبات آماری و حلقه ای به گردن دلفی در عوض اس کیو ال
به حداقل رسوندن فیلد ها و ردیف های مورد نیاز و Paging مناسب
و ...

خیلی خیلی می شه در این زمینه مطلب نوشت، باید دقیقا ببینید در چه قسمتی ایراد سرعت دارید.

scarlet_yekta
یک شنبه 16 آذر 1393, 14:58 عصر
ممنون از همه دوستانی که جواب دادن فکر میکنم باید توضیحاتم را بیشتر کنم تا بتونم از راهنماییهاتون درست استفاده کنم
تو طراحی دیتابیس این برنامه و جداول مشکلی نداره اینا از این جهت میگم که یک برنامه دیگه که خیلی هم سنگینتره وکاربرای زیادی داره با این دیتابیس کار میکنه اصلا مشکل کندی سرعت نداره.
این برنامه تعداد کاربران کمی داره.
این گزینه ای که فرمودید select * from را بررسی کردم تو اکثر منوها بعد از createform اومده یه select * from view where ... orderby.. داده
یعنی باید تا میشه اینها را حذف کنم؟
در موردadoconnection فقط یکی داره و تمام کارها یعنی ثبت و حذف و آپدیت را از طریق استورپروسیجر انجام داده.
پس نظر دوستان اینه که زیاد بودن دیتاماژولها باعث این کندی سرعت نشده درسته؟
آیا فارسی بودن زبان editbox ها هم میتونه تاثیر داشته باشه؟

یه چیزی که نمی فهمم اینه که چرا در زمان اجرا حتی هنوز سراغ باز کردن فرم ها نرفتی و بخوای فقط منوها را بازکنی و گزینه هاش را ببینی تو اونجا هم کنده!

یوسف زالی
یک شنبه 16 آذر 1393, 15:06 عصر
اشکال سر باز کردن دیتاست هاتونه، خصوصا اونهایی که هنگام ورود به فرم دارید. مثل گرید ها و لوکاپ ها.
ممکنه دلیلش این باشه که اطلاعات عمومی و همگانی رو هی باز و بسته می کنید، بهتره بعضی از این دیتاست ها در سراسر برنامه باز بمونند.
راهنمایی بیشتری نمی شه کرد. بقیش رو باید در برنامه شما بررسی کرد.

scarlet_yekta
دوشنبه 17 آذر 1393, 07:26 صبح
سربازکردن یعنی چی؟
یکی از نمونه کدها را براتون میفرستم:



Dm.QViewPSearch.Close;
Dm.QViewPSearch.SQL.Strings[0]:='';
Dm.QViewPSearch.SQL.Strings[1]:='';
Dm.QViewPSearch.SQL.Strings[2]:='';
Dm.QViewPSearch.SQL.Strings[3]:='';
Dm.QViewPSearch.SQL.Strings[0]:='select * from VWPSearch order by family';
Dm.QViewPSearch.Open;

Dm.QVwIsa.Close;
Dm.QVwIsa.SQL.Text:='select * from VwIsa where id=0';
Dm.QVwIsa.Open;
Application.CreateForm(TFrmIsa, FrmIsa);
FrmIsa.ClrFrmIsa;

FrmIsa.Txtl.Clear;
FrmIsa.Txt2.Clear;
FrmIsa.ShowModal;
FrmIsa.Free;

joker
دوشنبه 17 آذر 1393, 09:30 صبح
جدول VWPSearch چندتا رکورد داره ؟
اگه فرضا 1000 تا رکورد داشته باشه و هر رکورد 10 تا فیلد متنی ساده به طول 100 کاراکتر معمولی ، این دستور شما یک میلیون کاراکتر برمیگردونه به دیتاماژول شما.

پیوست:
برای ارسال دستورات sql به این دیتاست ها روش راحت تری هم هست:
برای پاک کردن رشته دستور قبلی:
Dm.QViewPSearch.SQL.clear

و برای پرکردن دستور قبل از اجرا
Dm.QViewPSearch.SQL.add('select * from table')

یوسف زالی
دوشنبه 17 آذر 1393, 09:42 صبح
مشکل سر باز کردن ...
مشکل به دلیل باز کردن ... :لبخند:



برای ارسال دستورات sql به این دیتاست ها روش راحت تری هم هست:
برای پاک کردن رشته دستور قبلی:
Dm.QViewPSearch.SQL.clear

دستور بهتر SQL.text := something هست.

شما باید تریس کنی ببینی دقیقا موقع رسیدن به این کوئری ها، که البته اس پی هم نیستند، چقدر زمان لازم دارید.
و این که چرا اصلا باید * رو سلکت کنید.
به نظرم می رسه شاید مستر دیتیل داشته باشید و دیتاست اونها هم همین دوتا باشه، درسته؟
اگر این طوره، دیتاست دیتیل به طرز وحشتناکی کند خواهد شد.

scarlet_yekta
چهارشنبه 03 دی 1393, 11:12 صبح
سلام
من اومدم این دستوراتی که قبل نمایش فرم select * میگرفت و میتونستم حذف کنم را حذف کردم
تو کدها هم
view.Close;
view.SQL.Clear;
view.SQL.Text:='select * from view where active=1';
view.Open;
را انجام دادم.
اما راستش آنچنان تاثیری رو سرعت نذاشت
وقتی من میخوام تو فرمم به کاربر امکان جستجو را بدم تو سرچ مجبورم * رو سلکت بگیرم.درسته؟

scarlet_yekta
چهارشنبه 03 دی 1393, 11:41 صبح
برا ی حل مشکل کندی من از یکی فرمها شروع کردم گزینه هایی که فرمودید را چک کردم :
طراحی درست جداول از نظر نوع های درست، ایندکس های خوب، طول صحیح فیلد ها، و در نهایت فایل بندی مناسب
ساخت درست و اصولی کوئری ها =========> با روشی که در ادامه شما و بقیه دوستان گفتن انجام دادم(حذف سلکتهای اضافی و .cleare و ...)
داشتن فقط و فقط یک ADOConnection====>فقط یکی بود
استفاده می نیمم از جداول موقتی، کانکشن های موقتی و ...=====> مشکلی نداره

انداختن محاسبات آماری و حلقه ای به گردن دلفی در عوض اس کیو ال=====>محاسبات آماری زیاد نداره اونی هم که بود سمت دلفی بود

کمکم کنید حل نشد :(

یوسف زالی
چهارشنبه 03 دی 1393, 12:47 عصر
باید پروژتون رو بررسی کرد.
این کار هم نیاز به تریس کد برنامتون داره. ممکنه اصلا کندی به چیز دیگه ای ربط داشته باشه که ازش غافل بودید.

scarlet_yekta
چهارشنبه 03 دی 1393, 13:39 عصر
حالا چیکار کنم :(

BORHAN TEC
چهارشنبه 03 دی 1393, 15:27 عصر
Hi
Poste 2 va 3 ro az linke zir bekhoonid:
http://barnamenevis.org/showthread.php?477511

hadisalahi2
چهارشنبه 03 دی 1393, 15:29 عصر
داداش Trace یعنی خط به خط اجرا کردن یک پروژه یا اصطلاح بهتر یک یونیت
با کلیدهای F7 یا F8 میتونی این کار رو انجام بدی

فکر نمیکنم کندی ربطی به select داده هات باشه
چون من برا خواندن چند ده هزار رکورد فقط 4 ثانیه برنامه متوقف میشه

مسلما مشکل از جایی هستش که شما به اون توجه نکردید و صد در صد با اجرای خط به خط برنامه می تونید مشکل رو پیدا کنید

یا حق

scarlet_yekta
شنبه 06 دی 1393, 13:47 عصر
دوستان عزیز به چه دلایلی وقتی برنامه اجرا میشه و هنوز روی منو یا باتن کلیک نشده که فرمی اجرا بشه و فقط میخوای روی منوها بری که ببینی چه زیرمنویی داخلش هست(بدون اجرای زیرمنوها) همین حرکت رو منوها هم کند پیش میره؟

hadisalahi2
شنبه 06 دی 1393, 15:19 عصر
بهت یک پشنهاد میکنم
یک بار که برنامه رو اجرا کردی ، فایل اجراییت رو ببر و روی یک سیستم دیگه تست کن
اگه کند بود ، پس برنامت مشکل داره
اگه روی سیستم دیگه درست بود ، پس سیستمت مشکل داره

حالا اگه برنامه مشکل داشت:
یک پروژه جدید بساز و چند تا فرم و منو بهش اضافه کن
حالا اگه بازم کند بود ، پس دلفی که داری مشکل داره یا کامپوننتی نصب کردی که سرعت اومده پایین
و اگه اون برنامه درست بود ، پس حتما برنامه ای که نوشتی یک جاش مشکل داره و ممکنه یک حلقه ای ایجاد کرده باشی که خودت خبر نداری

برای فهمیدن هم بهترین راه اجرای خط به خط برنامه هستش

امیدوارم با این 4 روش به نتیجه برسی

یا حق