ورود

نسخه کامل مشاهده نسخه کامل : استفاده از یه بک گراند ورکر!



H A M A S
14-08-2011, 09:13
من یه کد ثبت اطلاعات دارم که اجراش یکم طول میکشه
میخوام برای سرعتش بعضی از کارهای شرطی رو با بک گراند ورکر انجام بدم
برای همین این کد رو نوشتم
اما نمیدونم چه طوری بعد از این که شرطها رو چک کردم.توی رویداد کلیک دکمه به متغیرهای driverinq- driverins
دسترسی پیدا کنم
اگر یه نفر زحمت بکشه طرز صحیح استفاده از این ابزار رو برای چک کردن این شرط ها بهم بگه ممنون میشم

اینم کدی که برای اعمال بک گراند ورکر نوشتم!
فقط بهم بگید چه طوری میتونم به دوتا متغیری که توی2 خط اول تعریف کردم در سراسر برنامه دسترسی داشته باشم و مقدارشون رو چک کنم!


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
14-08-2011, 12:11
سلام

فقط بهم بگید چه طوری میتونم به دوتا متغیری که توی2 خط اول تعریف کردم در سراسر برنامه دسترسی داشته باشم و مقدارشون رو چک کنم!
خوب میتوانید دو متغییر را در سطح کلاس (مثلاً فرم جاری) عمومی تعریف کنید.
این کد خیلی نمادین و کلی است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فقط کافیست مطمئن شوید که کار DoWork پایان یافته و مقادیر این دو متغییر در وضعیت صحیحی قرار گرفته.
طبیعتاً اگر لازم است کد اطلاع رسانی و تغییر UI هم بعد پایان DoWork انجام شود با متد BeginInvoke بدون مشکل قابل انجام خواهد بود.

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

H A M A S
14-08-2011, 14:03
سلام

خوب میتوانید دو متغییر را در سطح کلاس (مثلاً فرم جاری) عمومی تعریف کنید.
این کد خیلی نمادین و کلی است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فقط کافیست مطمئن شوید که کار DoWork پایان یافته و مقادیر این دو متغییر در وضعیت صحیحی قرار گرفته.
طبیعتاً اگر لازم است کد اطلاع رسانی و تغییر UI هم بعد پایان DoWork انجام شود با متد BeginInvoke بدون مشکل قابل انجام خواهد بود.

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

فقط این کد من یکم طولانی چون
نزدیک 13 فیلد در یک جدول درج میشه
بعد اگر شرطهایی که توی بک گراند ورکر نوشتم درست باشه
2 تا فیلد از دو جدول متفاوت رو پاک میکنه!
و این کار شاید نزدیک 15 ثاینه طول بکشه!
برای همین شدیدا دنبال راه های برای کاهش سرعت انجام عملیاتم

ولی البته یه سوال کلی:استفاده از رویه های ذخیره شده در همه جا لازمه؟؟چون توی برنامه من شاید ده ها مورد درج و اکشی اتفاق بیفته
مثلا یه جدول با 4 تا فیلد که قراره توش اطلاعات درج بشه.اونم بهتره با رویه های ذخیره شده انجام داد یا به طور معمولی از داخل برنامه؟؟

با تشکر...

_H2_
14-08-2011, 15:54
سلام

این کار شاید نزدیک 15 ثاینه طول بکشه!
خیلی عجیب است، کارهای بیان شده در قد و قواره این زمان نیست، یعنی باید بسیار سریعترتر انجام شود.
شاید اگر طور صحیح تری کار را انجام دهید، در کسری از ثانیه انجام شود!


استفاده از رویه های ذخیره شده در همه جا لازمه؟
من نمیتوانم به شما فرمول کلی بگویم، این شما به عنوان برنامه نویس هستیبد که با جمیع شرایط این تصمیم را میگیرید.
ولی بحرحال معمولاً شخصاً برای هر جدول دیتابیس حداقل دو SP برای حذف و درج و بروزرسانی ایجاد میکنم.

ضمن اینکه گاهاً و بسته به شرایط برای انجام کارهای خاصی که یک روند مشخص هستند و باید چندین SELECT و UPDATE و... در یک بار اجرا شوند هم بجای نوشتن تک تک دستورات SELECT و UPDATE و فراخوانی تک به تک در برنامه، برای ان روند خاص یک SP تولید میکنیم.

مثلاً در دیتابیس شرکت، SP های سفارشی مختلفی برای محاسبات بیمه و حقوق و دستمزد و محاسبات فایفو و لایفو ارزش کالاها در فاکتور و... طراحی کردیم و استفاده میکنیم.

در واقع همانطور که در بالاگفتم، معمولاً جاییکه میبینیم کدهای درون برنامه میخواهند پشت سر هم SELECT و INSERT و UPDATE و DELETE و... انجام دهند، به این هم فکر میکنیم که شاید اگر کل کد با T-SQL و یک SP انجام شود، چطور میشود؟! (در مقابل کدهای مخلوط C#.Net با VB.Net همراه با کدهای ارتباط با دیتابیس لایه DAL)

=====

در خصوص خواندن اطلاعات هم (SELECT) اگر نیاز به فیلد محاسباتی خاصی باشد که در جاهای مختلف مقدارش مهم میشود (مثل تعداد اقلام فاکتور که در خود جدول فاکتور ذخیره نمیشود یا ارزش یک سند حسابداری که از جمع سطرها حاصل میشود و...) یک View ایجاد میکنیم که علاوه بر فیلدهای جدول اصلی این فیلدهای محاسباتی را هم در ادامه فیلدهای اصلی پس دهد.
و در سایر موارد معمولاً دستور SELECT را بیشتر در درون برنامه (لایه خودش) می آوریم ولی باز هم استثنا وجود دارد.


من شخصاً عادتی به استفاده از ظاهر شدن دستورات غیر SELECT در برنامه ندارم.
یعنی مثلاً در کدهای شرکت هم اگر درست یادم باشد، شاید بتوانم بگویم هیچ کجای کدها دستور SQL غیر SELECT پیدا نخواهید کرد و بقیه اعمال با حفظ نظم در نامگذاری به کمک SP ها انجام خواهد شد.

=====

بحرحال نحوه و چگونگی و محل استفاده از SP را شما باید در برنامه خودتان و با شرایط موجود تشخیص دهید.
موفق باشید.

H A M A S
14-08-2011, 16:16
خیلی عجیب است، کارهای بیان شده در قد و قواره این زمان نیست، یعنی باید بسیار سریعترتر انجام شود.
شاید اگر طور صحیح تری کار را انجام دهید، در کسری از ثانیه انجام شود!

البته برای درج اول اینقدر طول میکشه
و اگر پشت سر اینکه اولین رکورد رو درج کردم-بخوام رکورد دوم رو درج کنم به قول شما در کسری از ثانیه انجام میشه!

در مورد SP ها:
من همین قسمتی که گفتم کدش زمانبر هست محاسبه درصد پورسانت رو هم انجام میده!
که 2 خط بیشتر نیست!
فکر کنم نوشتن این قسمتش با SP برای شروع یادگیری مناسبه!
در کل اینجور برداشت کردم که استفاده زیاد از SP ضرری نداره!
تشکر!