تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] بطئ تحديث كونترول اثناء استخدام linq
#4
اكيد 11,000,000 مليون مرة أنت تحدّث بيانات في الشاشة وهذة البيانات الفورم يحتاج يعيد رسمها للمستخدم,

أنت مجبر تظحي بشيء من الاثنين :
أما تختار السرعة وتضحي بعملية تحديث البيانات على الشاشة للمستخدم
إما تختار تحديث البيانات على الشاشة وتضحي بالسرعة

أولاً أنت اسأل نفسك سؤال ,
هل أنا فعلاً محتاج أحدث البيانات على الشاشة ( على سبيل المثال : جلب البيانات من قواعد البيانات , هل رأيت أحد يقوم بعمل ProgressBar لعملية جلب البيانات )
أم أكتفي بمؤشر يدل على جريان العملية فقط.
الأغلب إن لم يكن الكل يستخدم مؤشر متحرك لا يدل على حجم العملية ولا يدل على كمية البيانات , وإنما فقط يدل على أن العملية جارية فقط , وتحت الإجراء )
مثال :


جار العمل على تحليل البيانات
   


وعند إنتهاء العملية ييختفي المؤشر مثلاً.





إذا أردت تحديث الشاشة في نفس الوقت الذي تتم فيه العملية وبشكل سلس, أنت مجبر على تطبيق مبادء الــ Multithreading أو الــ Multitasking ( المهام المتعددة )
وهذا الموضوع للأمانة ليس بالسهل ومعقد وغير آمن إلا للمحترفين جداً ( وأنا أقصد الــ Multitasking التي تستهدف النافذة وجميع الكنترولات ) 
المبداء واضح لكن تطبيقة صعب جداً , حتى حل المشاكل في هذا النوع يعتبر كابوس
حتى أنا ضعيف في الــ Multitasking 


جرب هذا الكود : ( قمت بتجربة وإستطاع قراءة عدد 22,000,000 مليون سطر في أقل من 10 ثواني )
فكرة هذا الكود يقوم بتوجيه جميع الأنوية في وحدة المعالجة المركزية الـ CPU لتنفيذ الكود ( حسب المعالج في جهازك - إذا كان يمتلك الكثير من الأنوية سيتم الأمر بأسرع مما تتخيل )
هذا الكود يعتمد على الــ Multitasking 
إذا اردت السرعة القصوى لا تستدعي الأمر Invoke لأي كنترول موجدود على الشاشة لأن Invoke في النهاية يقوم بأمر الــ Thread الوحيد والمسؤول عن رسم جميع الكنترولات على الشاشة
كود :
   Sub Multitasking()
       Dim CancelToken As System.Threading.CancellationTokenSource = New System.Threading.CancellationTokenSource() 'The Token For Cancelling Task if needed

       Dim POptions As New System.Threading.Tasks.ParallelOptions  'Option Argument For Parallel.ForEach
       POptions.MaxDegreeOfParallelism = Environment.ProcessorCount 'max threads
       POptions.CancellationToken = CancelToken.Token 'Setting The Cancellation Token

       Parallel.ForEach(File.ReadAllLines("Filepath"), POptions, Sub(ReadedLine)

                                                                     'YOUR CODE,
                                                                     'FOR EXAMPLE:
                                                                     'Richtextbox1.Invoke(Sub()
                                                                     'Richtextbox1.Text &= ReadedLine
                                                                     'End Sub)

                                                                 End Sub)
   End Sub
الرد }}}
تم الشكر بواسطة: Taha Okla , Taha Okla , الماجيك مسعد


الردود في هذا الموضوع
RE: بطئ تحديث كونترول اثناء استخدام linq - بواسطة عبدالله الدوسري - 11-10-22, 11:01 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف الى استخدام webview2 من ملف dll justforit 2 200 28-10-25, 02:49 AM
آخر رد: justforit
  [سؤال] حول استخدام ffmpeg مع progressbar justforit 2 235 09-10-25, 03:33 AM
آخر رد: justforit
  [VB.NET] استخدام كلمة برمجية كمتغير mmaalmesry 1 166 02-10-25, 08:55 AM
آخر رد: Taha Okla
  مساعدة في تحديث سيد أحمد 2 559 18-05-25, 03:11 AM
آخر رد: مصمم هاوي
  [VB.NET] مشكلة تظهر عند استخدام الملف manifest mmaalmesry 2 622 12-05-25, 12:15 AM
آخر رد: mmaalmesry
  تعديل كود تحديث البيانات مصمم هاوي 1 784 26-04-25, 06:07 PM
آخر رد: مصمم هاوي
  مشكلة ارفاق قاعدة البيانات sql في المشروع اثناء التحزيم 0 259 10-10-24, 03:28 PM
آخر رد: محمد العامر
  كيف يمكن اضافة عناصر للكومبوبوكس اثناء تشغيل البرنامج عن طريق المستخدم haithammoftah 3 2,161 30-09-24, 12:52 AM
آخر رد: asmarsou
  [VB.NET] تحويل pdf الى صورة بدون استخدام الاكروبات بأستخدام adobe reader العادى فقط AhmedNagib 1 1,180 11-07-24, 01:16 PM
آخر رد: تركي الحلواني
  [VB.NET] السلام عليكم لدي جدول فرعي وارد تحديث الجدول الرئيسي raedre22 2 371 06-07-24, 12:50 PM
آخر رد: raedre22

التنقل السريع :


يقوم بقرائة الموضوع: