PDA

View Full Version : مشکل در سرعت Load داده ها از بانک اطلاعاتی SqlServer در روش Dataset ویزاردی بهمراه Table Adapter



k1csharpdeveloper
سه شنبه 20 تیر 1391, 20:28 عصر
همکاران و دوستان گرامی من یک نرم افزار دندانپزشکی نوشتم که در یک صفحه اون دچار مشکل شدم و چند ثانیه زمان میبره برای fill کردن داده ها که به این شکل هستش که اول از این فرم که پرونده بیماران هست استفاده میکنیم و با انتخاب بیمار مورد نظر دکمه ویرایش رو میزنیم و وارد فرم دوم میشیم

که این فرم شامل یک tabcontrol هستش که دارای چندین tabitem هست وقتی این فرم بالا میاد Id رو از فرم قبلی میگیره و اطلاعات اون Id رو لود میکنه منتها مسئله اینجاست که من از روش Table Adapter استفاده کردم و کلیه tabitem ها که هر کدوم شامل یک table هست fill میشه و سرعت میاد پایین کدهایی که در Load فرم استفاده کردم هم به این شکل هستش :

کدهای برنامه قسمت load ,Constructor



ئووبه همین ترتیب هرکدوم از این عکس ها برای یک TabItem هستش به جز Fill کردنشون که مشترک بود توی عکس اول حالا من نظرم این بود که tabitem مشخصات رو به همین ترتیب Load کنم ولی مابقی رو کاربر روی هر Tab که زد همون موقع لود بشه اطلاعات اون قسمت و اگر راهی هم وجود داره که سرعت رو ببرم بالا لطف کنید کمک کنید

k1csharpdeveloper
سه شنبه 20 تیر 1391, 20:31 عصر
89518895198952089521

veniz2008
سه شنبه 20 تیر 1391, 20:55 عصر
سلام،طبق توضیحاتی که خودتون دادید کارتون کاملا غیر منطقی هستش، مثلا شما در یک tabcontrol فرضا 5 تا tabpage دارید و هر tabpage شامل یک جدول خواهد بود. شما اومدید به یکباره تمام کدهای مربوط به این tabpage ها رو درون formload گذاشتید در صورتیکه ممکنه فقط با یک tabpage کار داشته باشی و عملا 4 تا عملیات شما در این حالت نامطلوب هستش. واسه بهبود سرعت برنامه تون خیلی ساده میتونید از رویداد Enter مربوط به tabpage کدهای مورد نظرت رو قرار بدی تا در صورت وارد شدن به اون tabpage اون کدها اجرا بشن ( در واقع جدول مربوط به اون tabpage مقدار دهی بشه).
موفق باشید.

k1csharpdeveloper
چهارشنبه 21 تیر 1391, 00:20 صبح
سلام مرسی که کمک کردید من امتحان کردم و چون موقع باز شدن فرم tabPage اول من که مشخصات بیمار هست و ضروری هست باز شدنش اونو گذاشتم توی load form بمونه و مابقی رو comment گذاشتم تاببینم تغیری توی سرعت اتفاق میفته یا نه که دیدم آنچنان تاثیری نداشت کل کدهای فرم رو بررسی کردم دیدم یک اتفاق عجیب افتاده و یک عالمه کد که جاش اصلا اینجا نیست و بصورت اتوماتیک تولید میشه اضافه شده به فرمم در قالب این قسمت رو چکار میتونم بکنم چون حدود دقیقا 5 ثانیه طول میکشه تا بیاد فرمم و این برای کاربر قابل تحمل نخواهد بود
private void InitializeComponent
}
{

debugger
چهارشنبه 21 تیر 1391, 00:52 صبح
عزیز دل شما بیا دور ویزارد را خط بکش کد های اون قسمت را دستی بنویس . هم حجم کد کم میشه . هم ادم میفهمه چی به چیه

veniz2008
چهارشنبه 21 تیر 1391, 11:08 صبح
با دوستمون موافقم، استفاده از ویزارد زمانی مناسبه که به روند برنامه شما لطمه نزنه( شخص خودم حتی اگه ویزارد هیچ مشکلی هم پیش نیاره بازم استفاده نمیکنم مگر واقعا مجبور باشم).اگه تو کدنویسیش مشکل داری بگو تا دوستان راهنمایی کنن.

tooraj_azizi_1035
چهارشنبه 21 تیر 1391, 11:24 صبح
سلام
برای پاسخگو نگهداشتن واسط کاربری (Responsive UI) یکی استفاده از BackgroundWorker که باعث میشه کار زمان بر در یک نخ جداگانه اجرا بشه و UI همچنان برای کاربر پاسخگو باشه و دومی استفاده از Lazy initialization در برنامه است.

Lazy Loading این امکان رو می ده که فقط در هنگام نیاز کار سنگین شروع بشه. مثلاً ممکن است یک فرم بالا بیاید اما کاربر هرگز دکمه مشاهده رکوردها رو نزنه در این صورت چه لزومی داره با لود فرم 100000000 رکورد همون اول نمایش داده بشه!



// Initialize by using default Lazy<T> constructor.
// The Orders array itself is not created yet.
Lazy<Orders> _orders = new Lazy<Orders>();



http://msdn.microsoft.com/en-us/library/dd997286.aspx

How to: Run an Operation in the Background (http://msdn.microsoft.com/en-us/library/hybbz6ke.aspx)