تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] بطئ تحديث كونترول اثناء استخدام linq
#5
(11-10-22, 11:01 PM)عبدالله الدوسري كتب : اكيد 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

ما شاء الله عليك وعلي شرحك الاكثر من رائع كان شرحك وافي جدا للتوضيح
بالفعل اعمل علي ذلك ولكن احببت ان اجعل الامر اكثر احترافية لتحديد الوقت الحالي والمتبقي علي العمليات خصوصا علي الملفات او العمليات الكبيرة ولكن ربما لما يأتي وقتها بعد ساحاول مرة اخري بعد فترة من الزمن لانى لم اتعمق ايضا في العمليات المتعددة
عندي فضول اعرف لو مش هستخدم invoke اثناء الاستخدام طيب هستخدم ايه عشان الادوات متقفش في وضع التجميد لحد انهاء العملية
الاول كنت بستخدم Control.CheckForIllegalCrossThreadCalls = False ولكن بدأت مؤخرا عمل invoke تقريبا لكل اداة وبصراحة الامر رخم اكيد في طريقة افضل
الرد }}}
تم الشكر بواسطة:


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

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف الى استخدام webview2 من ملف dll justforit 2 199 28-10-25, 02:49 AM
آخر رد: justforit
  [سؤال] حول استخدام ffmpeg مع progressbar justforit 2 234 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 257 10-10-24, 03:28 PM
آخر رد: محمد العامر
  كيف يمكن اضافة عناصر للكومبوبوكس اثناء تشغيل البرنامج عن طريق المستخدم haithammoftah 3 2,160 30-09-24, 12:52 AM
آخر رد: asmarsou
  [VB.NET] تحويل pdf الى صورة بدون استخدام الاكروبات بأستخدام adobe reader العادى فقط AhmedNagib 1 1,178 11-07-24, 01:16 PM
آخر رد: تركي الحلواني
  [VB.NET] السلام عليكم لدي جدول فرعي وارد تحديث الجدول الرئيسي raedre22 2 369 06-07-24, 12:50 PM
آخر رد: raedre22

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


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