PDA

View Full Version : حرفه ای: علت کاهش سرعت بارگذاری فرم



milad.biroonvand
یک شنبه 19 بهمن 1393, 14:28 عصر
من در فرمم از 15 تا کمبوباکس یا همان لیست کشویی استفاده می کنم، و محتوای همه رو با استفاده بایند پر می کنم، پر کردن هر کمبوباکسی با استفاده از یک تابع که اطلاعات رو از یک جدول میخونه پر میشه، من این توابع رو در رویداد shown فرم فراخوانی می کنم ولی سرعت لود فرم خیلی پایین میاد، آیا راه حلی برای این کار وجود داره؟

swallow.pa
یک شنبه 19 بهمن 1393, 15:31 عصر
دوست عزيز با رويداد فرم لود و اكتيو امتحان كن من معمولا از اين دو تا رويداد براي فرمها استفاده مي كنم كه كمبو ها لود شن

milad.biroonvand
یک شنبه 19 بهمن 1393, 16:38 عصر
دوست عزيز با رويداد فرم لود و اكتيو امتحان كن من معمولا از اين دو تا رويداد براي فرمها استفاده مي كنم كه كمبو ها لود شن

آره ولی من موندم از کدوم رویداد استفاده کنم که سرعت کمتر شه بطوریکه رویدادهای زیر وجود دارند:
1) رویداد فرم لود: تنها یکببار و هنگام بارگذاری فرم اجرا میشه
2) رویداد اکتیویت در هر بار که روی فرم کلیک بشه اجرا میشه (بنظرم اشتباه اینجا نوشته بشه)
3) رویداد shown یک مرحله بعد از رویداد لود است
4) رویداد paint هست وقتی هست که فرم داره کشیده میشه.

خواهشمندم دوستان دیگه کمک کنند که کدوم رویداد سرعت لود رو کمتر میکنه.

تشکر

Mani_rf
یک شنبه 19 بهمن 1393, 17:01 عصر
بهتره این طور کد ها رو توی Form Load بنویسی. اگر داری چندین لیست رو از یک تیبل با شرایط متفاوت پر میکنی بهتره که بجای چندیدن سلکت، کل اطلاعات تیبل رو یک بار لود کنی و شرط گذاری ها رو روی تیبل لود شده انجام بدی و لیست ها رو پر کنی که سرعتت چندین برابر بشه. در واقع مکانیزم کش پیاده سازی کن. اگر همه این روش ها جواب نداد بهتره که از روش های موازی سازی مثل ترد ها استفاده کنی.
موفق باشید

milad.biroonvand
یک شنبه 19 بهمن 1393, 17:12 عصر
بهتره این طور کد ها رو توی Form Load بنویسی. اگر داری چندین لیست رو از یک تیبل با شرایط متفاوت پر میکنی بهتره که بجای چندیدن سلکت، کل اطلاعات تیبل رو یک بار لود کنی و شرط گذاری ها رو روی تیبل لود شده انجام بدی و لیست ها رو پر کنی که سرعتت چندین برابر بشه. در واقع مکانیزم کش پیاده سازی کن. اگر همه این روش ها جواب نداد بهتره که از روش های موازی سازی مثل ترد ها استفاده کنی.
موفق باشید

تشکر، من برای گرید ها جهت افزایش سرعت از روشی که گفتید استفاده می کنم که عالیه، ولی 15 تا کمبوباکس باید 15 تا select استفاده بشه. حالا فرض ما بر این است که نه فقط یک select * from mytable است و شرط خاصی وجود نداره،
روش های موازی سازی به چه صورت هست؟ آیا منظورتون استفاده از نخ ها هست؟
تشکر

Mani_rf
دوشنبه 20 بهمن 1393, 09:06 صبح
اگر سکلت بدون شرط اجرا کنی و همه اطلاعات رو توی رم بیاری سلکت زدن دوباره از توی رم، تقریبا سرعتی معادل با صفر داره. برای این کار از Linq استفاده کن که سرعت واقعا خوبی داره.

نخ یکی از روش های موازی سازی به حساب میاد. روش های دیگه ای هم هست. برای مثال برای آشنایی با Task این لینک (https://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx) رو نگاه کن.

Mani_rf
دوشنبه 20 بهمن 1393, 09:09 صبح
این مقاله روش های مختلف برنامه نویسی موازی (http://www.codeproject.com/Articles/71285/Introducing-NET-Parallel-Programming) را توضیح داده.

milad.biroonvand
دوشنبه 20 بهمن 1393, 11:01 صبح
ممنون، مقاله جالبی بود، ببینم میتونم فارسیش کنم اینجا بزارمش

milad.biroonvand
دوشنبه 04 اسفند 1393, 14:03 عصر
من در جایی خوندم که برنامه نویسی مجازی روی سیستم های زیر انجام میشه
یک رایانه با چندین پردازنده
یک رایانه با پردازنده چند هسته ای
چند رایانه متصل به هم از طریق شبکه

آیا این درسته؟
و در یک مقاله دیدم که نوشته بودند «
برنامه نویسی موازی تو عمل بسیار سخت و ریسکی هستش ، به طوریکه تو اکثر پروژه های تجاری از اون صرف نظر می شه.»

حالا ما اگر در پروژمون از برنامه نویسی موازی استفاده کنیم آیا امکان داره روی یک سیستم pentum 4 معمولی جواب نده؟!!
تشکر

milad.biroonvand
سه شنبه 05 اسفند 1393, 23:12 عصر
سلام


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


من از کدهای زیر جهت فراخوانی از نخ ها استفاده کردم
Dim thread As New Threading.Thread(AddressOf fillcombobox1)
thread.Start()
Dim thread2 As New Threading.Thread(AddressOf fillcombobox2)
thread2.Start()

Aryan.Software
چهارشنبه 06 اسفند 1393, 15:32 عصر
میتونی از Splash Screen استفاده کنی. این فرم قبلش از اجرای فرم اصلی اجرا میشه و تمام عناصر رو بارگذاری میکنه
در منو بالا Project > Add New Item > Splash Screen رو انتخاب کن. بعد در قسمت تنظیمات پروژه و در تب Application > در بخش Framework Properties کمبو اسپلش رو پیدا کنید و به فرم اسپلش ساخته شده اختصاص بدیدش

milad.biroonvand
چهارشنبه 06 اسفند 1393, 15:43 عصر
میتونی از Splash Screen استفاده کنی. این فرم قبلش از اجرای فرم اصلی اجرا میشه و تمام عناصر رو بارگذاری میکنه
در منو بالا Project > Add New Item > Splash Screen رو انتخاب کن. بعد در قسمت تنظیمات پروژه و در تب Application > در بخش Framework Properties کمبو اسپلش رو پیدا کنید و به فرم اسپلش ساخته شده اختصاص بدیدش

اون موقع چه تو اسپلش اسکرین نشون بدم؟!!! اسپلش اسکرین برای نمایش یک تبلیغ یا درباره برنامس، اگر توی فرم اصلی بود آره میشه ولی توی یک فرم جداگانه هست.

Aryan.Software
چهارشنبه 06 اسفند 1393, 15:56 عصر
اون موقع چه تو اسپلش اسکرین نشون بدم؟!!!
میتونید یه تصویر Loading داخل فرم اسپلش اسکرین بذارید و داخلش بنویسید "لطفا صبر کنید" تا برنامه کاراشو با خیال راحت انجام بده.


اسپلش اسکرین برای نمایش یک تبلیغ یا درباره برنامس.
اسپلش برای این مواردی که گفتید هم ممکنه بکار بره ولی اصلی ترین کارش بارگذاری عناصر برنامست. اون هم زمانی که در قسمت Windows Application Framework Properties اون رو به عنوان اسپلش برنامه ست کنید. وگرنه که هیچ کاری انجام نمیده و مسلمه که در این صورت به درد لای جرز هم نمیخوره!


اگر توی فرم اصلی بود آره میشه ولی توی یک فرم جداگانه هست.
اسپلش عمل بارگذاری اولیه رو انجام میده. حالا برای هر فرمی که باشه فرق نمی کنه.

milad.biroonvand
چهارشنبه 06 اسفند 1393, 16:18 عصر
میتونید یه تصویر Loading داخل فرم اسپلش اسکرین بذارید و داخلش بنویسید "لطفا صبر کنید" تا برنامه کاراشو با خیال راحت انجام بده.


اسپلش برای این مواردی که گفتید هم ممکنه بکار بره ولی اصلی ترین کارش بارگذاری عناصر برنامست. اون هم زمانی که در قسمت Windows Application Framework Properties اون رو به عنوان اسپلش برنامه ست کنید. وگرنه که هیچ کاری انجام نمیده و مسلمه که در این صورت به درد لای جرز هم نمیخوره!


اسپلش عمل بارگذاری اولیه رو انجام میده. حالا برای هر فرمی که باشه فرق نمی کنه.

از اینکه اینهمه وقت گذاشتی ممنون و ازت تشکذ هم کردم ولی میتونی چیه من نمیخام کاربر صبر کنه میخوام کاری کنم که به سرعت و با استفاده تکنیک های موازی سازی و اینها فورا فرم رو براش پر کنم.