الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اسئله عن سرعة التنفيذ

بدأه ( HASSAN ) في 14 يوليو 2011 · 9 رد · 939 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لدي برنامج قمت بعمله على VB.net 2010 اهم جزئيه في البرنامج هو السرعه في التنفيذ للحصول على نتائج جيده با ستخدام خوارزميه معينه .. تم التعديل عليه مساعدة بعض الاخوه جزاهم الله خير وزادت السرعه , لكنني اريد ان استفسر عن بعض الامور التي فد تزيد في سرعة البرنامج ..

1 :- اثناء العمل يتم الاستدعاء من اكثر من فورم يعني مثلا لو كان لدينا 10000 دوره وتبدا في form1 وتستدعي في كل دوره اكثر من 100 مره من form2 فهل هذا يعتبر سبب بطء ؟ ماذا لو وضعت في نفس ال form ؟

2:- البرنامج يتعامل مع grids ويجري تبديلات بينهم وايضا في كل دوره اكثر من 100 مره .. وقد تكون ايضا في نفس grid فهل هذا يؤثر على السرعه ؟

3:- عملية نسخ محتويات بين grid و grid اخرى بشكل نسخ cell to cell هل يعتبر هذا بطء ايضا ؟

هذه بعض الاسئله التي اشعر انها قد تبطء من عمل البرنامج .. هل تعتقدوا ان لها دور في بطء وسرعة البرنامج ؟ وماهي الاقتراحات الاخرى بنفس الطريقه يعني دون ان اقوم بتحويل ال grids الى arrays مثلا ..

تحياتي

#2

السلام عليكم ورحمه الله وبركاته

اخي بالنسبة لبرنامجك حاول ان تستخدم هياكل بيانات معينة تساعد من تحسين اداء البرنامج مثل ال Hash Table وحاول لا الابتعاد من جملة ال goto وقم بتنظيم اجراءاتك وقلل من عمليات التنقل والاستدعاء بين الفورمات, كما انصحك باستخدام مفهوم ال Multithreading او البرمجة الغير متزامنة لتحصل على اداء افضل, اما بالنسبة للدوران لوكنت تستخد دوران داخل دوران فحاول تحسن ترتيبها وتقلل من عملية المقارنات طبعا حسب ما يقتضي الامر

1

.:: Wish to become better and better ::.

#3

من خلال كلامك اخي العزيز الاحظ انك تقوم بالعمل على التعامل مع اعداد كبيرة جدا من الصفوف rows في ادوات DataGridView ، تجنب القيام بذلك واستبدلها بهياكل بيانات كما قال الاخ VB Helper ، ابني Structures واستخدم List منها ،واذا لم تكف السرعه فسيكون عليك عناء استخدم المصفوفات Arrays لأسرع اداء ممكن ، بعدها قم بعرض الناتج النهائي على Grid .

2
#4

VB Helper شكرا

النبهاني كتب:

من خلال كلامك اخي العزيز الاحظ انك تقوم بالعمل على التعامل مع اعداد كبيرة جدا من الصفوف rows في ادوات DataGridView ، تجنب القيام بذلك واستبدلها بهياكل بيانات كما قال الاخ VB Helper ، ابني Structures واستخدم List منها ،واذا لم تكف السرعه فسيكون عليك عناء استخدم المصفوفات Arrays لأسرع اداء ممكن ، بعدها قم بعرض الناتج النهائي على Grid .

جزاك الله خير

+1

#5

اخي النبهاني صراحة لا استطيع ان اغير وابدل ال grids ب arrays او غيرها ... الموضوع ببساطه انه الدوال نوعا ما لا استطيع التغيير فيها .. قرأت عن طريقة ال Parallel ولكنني اريد فقط ان استخدمها لاستدعاء الدوال في نفس الوقت دون التغيير في هذه الدوال هذا الذي يخدمني لحد الان .. لكنني قرات عنه بعض المقالات ولم استطع ان احور فكرته الى البرنامج لدي برمجيا .. فهل هنالك طريقه مثلا لاستدعاء هذه الدوال مع بعض دون الاضرار بشكلها ومخرجاتها ؟

جزاك الله خير

#6

لم تذكر لنا العملية التي تقوم بها بالضبط حتى نتيقن هل من الممكن الاستعاضه عنها بدوال اخرى ام لا .

بالنسبه للبرمجة المتوازية Parallel Programming ، لم اقم بدراستها وتجربتها بشكل جيد لكن اعتقد انه يمكنك تنفيذ الكود الخاص بك بواسطتها مباشرة سآتي لرابط يوضح الموضوع ،وهناك عنصرين اساسيين ستحتاجهما : Parallel Loop و Parallel Task ، الرابط التالي سيفيدك ان شاء الله من خلال الامثله الموجودة به :

http://www.codeproject.com/KB/Parallel_Programming/NET4ParallelIntro.aspx

تحياتي

#7

العمليه عباره ان استدعاء ثلاث دوال بشكل تسلسلي ...

يعني مثلا لدينا grid رئيسه خزنتها في 3 grids بنفس القيم واقوم بعمليات تبديل بين 2 cells داخل هذه ال grids الثلاث طبعا كل داله لديها grid خاصه بها ويتم التبديل عشوائي لكل داله على حده .. ببساطه اللي ابحث عنه كيف استطيع ان انفذ هذه الدوال الثلاث في نفس الوقت بدل ان اعمل بالاولى ثم انتهي منها واذهب الى الثانيه ثم انتهي منها واذهب الى الثالثه .. وهذه الامور تحدث عن الضغط مثلا على button وتبدا العمليات بالتنفيذ ..

لذا اغلب الذي قراته عن البرمجه المتوازيه لم استطع ان احصل على طريقة عملها بالشكل الذي اريد مع انها تخدمني بشكل كبير ..

جزيتم خيرا ..

#8

اخي هل جربت استخدام ال Multithreading ؟؟؟ حيث تقوم بتعريف threads وتجعل كل thread يقوم بتنفيذ واحد من الدوال التي تريدها ، وكلها تتم في نفس الوقت ، لكن هذه الطريقة لن تزيد السرعه بقدر ما ستجعل البرنامج يستجيب للمستخدم ولا يعمل stuck . قد اعود لاحقا بعد البحث اكثر في الموضوع .

#9

كيف استطيع معرفة كم استغرقت الداله من وقت للتنفيذ ؟

#10

يمكنك ذلك من خلال استخدام كائن من الفئة StopWatch وهي موجودة في فضاء الاسماء System.Diagnostics ويمكنك ان تقوم بعملها كالتالي :

Dim mTimer as new StopWatch
mTimer.Start
'نفذ العملية التي تريدها هنا

'بعد ذلك
mTimer.Stop

بعد أن تستدعي الطريقة Stop ، استخدم الخاصية ElapsedMiiliseconds لتعرف الوقت المستغرق بالملي ثانيه.

تحياتي

مواضيع مشابهة