![]() |
|
استخدام بحيرة المسارات Using the Thread pool - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : استخدام بحيرة المسارات Using the Thread pool (/showthread.php?tid=4795) |
استخدام بحيرة المسارات Using the Thread pool - RaggiTech - 02-10-12 كاتب الموضوع : samerselo
إنشاء العديد من المسارات قد يسبب انخفاض أداء النظام بسرعة وخاصة عندما تصرف هذه المسارات معظم وقتها في حالة سبات أويعاد تشغيلها بصورة دورية بغرض قراءة مصدر ما أو تحديث الإظهار. ولتحسين أداء كودك يمكنك إعادة ترتيب بحيرة المسارات بشكل يضمن أكفأ استخدام للموارد باستخدام بعض الأغراض Objects الموجودة في مجال الأسماء System.Threading بحيرة المسارات The ThreadPool Type يتم إنشاء بحيرة المسارات عندما تقوم باستدعاء الدالة ThreadPool.QueueUserWorkItem والتي تحتاج لإجراء مفوض WaitCallback delegate وغرض Object اختياري يستخدم لتمرير البيانات للمسار والإجراء المفوض يجب أن يشير إلى Sub يمرر له بارامتر وحيد من النوع Object بحيث تكون قيمته محتوية على البيانات التي نريد تمريرها للمسار أو Nothing عندما لا توجد بيانات نريد تمريرها وقطعة الكود التالية تبين لك كيف يمكنك استخدام عدد كبير من المسارات لاستدعاء إجراء في فئة Class كود : For i As Integer = 1 To 20كود : Class LightweightTaskكود : ' Maximum 30 worker threads and maximum 10 asynchronous I/O threads in the poolThe Timer Type تقدم الفريموورك عدة أنواع من المؤقتات كل منها يمتلك نقاط قوته وضعفه. فمثلا يجب عليك استخدام التحكم System.Windows.Forms.Timer عندما تقوم بالعمل على تطبيق من النوع Windows Forms applications وإن لم يكن برنامجك يمتلك واجهة للمستخدم يجب عليك عندها استخدام الفئة System.Threading.Timer أو الفئة System.Timers.Timer وتعتبر هاتان الفئتان متساويتين في العمل تقريبا والشرح التالي على System.Threading.Timer ينطبق أيضا على System.Timers.Timer الفئة Timer في مجال الأسماء System.Threading يقدم طريقة بسيطة لمؤقت يستدعي إجرائية محددة حيث يمكنك استخدام هذه الفئة لجدولة عمل في وقت معين في المستقبل ويمكن تنفيذه بالتكرار الذي تحتاجه مهما يكن ابتداء من مرة واحدة فما فوق وباني المؤقت يأخذ أربعة بارامترات: • إجراء مفوض TimerCallback delegate يشير إلى الإجراء الذي يستدعى عندما ينتهي زمن المؤقت ويجب أن يكون هذا الإجراء من النوع Sub يأخذ بارامتر واحد من النوع Object • غرض Object يتم تمريره للإجراء الذي يشير إليه المفوض ويمكن أن يكون من عدة أنواع كسلسلة نصية أو مصفوفة أو مجموعة Collection أو أي نوع بيانات آخر يحتوي على البيانات التي سيتم تمريرها للإجراء وإن لم تكن تحتاج لتمرير قيم استخدم Nothing بكل بساطة • قيمة من النوع TimeSpan تحدد زمن المؤقت الذي سيتم استدعاء الإجراء بعده كما يمكن تحديدها باستخدام قيمة من النوع Long أو UInteger وفي هذه الحالة يقاس الزمن بالميللي ثانية (1/1000 من الثانية) وعند تمرير Timeout.Infinite كقيمة لا يتم إطلاق المؤقت أبدا أو القيمة 0 صفر لإطلاق المؤقت مباشرة • قيمة من النوع TimeSpan تحدد زمن المؤقت والتي بدورها تحدد زمن تكرار إطلاق المؤقت بعد المرة الأولى. وهذه أيضا يمكن تحديدها بقيمة من النوع Long أو UInteger وهنا أيضا يصبح الوقت مقاسا بالميللي ثانية ويمكنك تمرير القيمة 1 أو Timeout.Infinite لإطلاق المؤقت مرة واحدة فقط. وهذه القيم التي تمررها لباني المؤقت غير متوفرة كخصائص. وبعد تشغيل المؤقت يمكنك تغيير هذه القيم فقط باستخدام الطريقة Change method والتي تأخذ بارامترين يحددان وقت التشغيل وفترة زمن المؤقت ويمتلك Timer object إجراء Stop الذي يقوم بإيقاف المؤقت الذي يتم إيقافه عبر استدعاء الإجراء Dispose وترينا قطعة الكود التالية مثالا عما تحدثنا عنه حول المؤقت كود : Sub TestThreadingTimer() |