المتابعون للمدونة

الاثنين، 2 مايو 2016

قياس زمن التنفيذ


س: كيف يمكن قياس زمن تنفيذ كود معين؟

ج: يمكن استخدام الفئة Stopwatch لحساب الزمن المنقضي بين استدعاء الوسيلة Stopwatch.Start والوسيلة Stopwatch.Stop، حيث تعيد الخاصية Stopwatch.Elapsed كائنا من النوع TimeSpane يحمل المدة الزمنية التي مرت. 

كود فيجوال بيزيك:

Dim Sw As New Stopwatch()

Sw.Start()
مثلا

For i = 0 To 1000000

       Dim j = 0

       j += 1

Next

Sw.Stop()

MsgBox(Sw.Elapsed.TotalMilliseconds)

 
كود سي شارب:

var Sw = new System.Diagnostics.Stopwatch();

Sw.Start();

// العملية المراد حساب وقتها.. مثلا

for (int i = 0; i <= 1000000; i++)

    {

       int j = 0;

       j++;

    }

Sw.Stop();

MessageBox.Show(Sw.Elapsed.TotalMilliseconds.ToString());

 

ويمكن استخدام طريقة أخرى، وهي حفظ زمن البداية في متغير، وطرحه من زمن النهاية مباشرة بدون استخدام فئة الميقاتي:

 

كود فيجوال بيزيك:

Dim St = Now

' العملية المراد حساب وقتها.. مثلا

For i = 0 To 1000000

      Dim j = 0

      j += 1

Next

MsgBox(Now.Subtract(St).TotalMilliseconds)

 

كود سي شارب:

var St = DateTime.Now;

// العملية المراد حساب وقتها.. مثلا

for (int i = 0; i <= 1000000; i++)

{

     int j = 0;

     j++;

}

MessageBox.Show(DateTime.Now.Subtract(St).TotalMilliseconds.ToString());

 

ملحوظة:

عند تجربة الكود الأول بفيجوال بيزيك 2015 على جهازي استغرق 3.3 مللي ثانية، بينما استغرق تنفيذ كود سي شارب: 6.5 مللي ثانية!!

وعند تجربة الكود الثاني في فيجوال بيزيك استغرق حوالي 4 مللي ثانية، بينما استغرق في سي شارب 15 مللي ثانية!

 

السبب كما ذكرت سابقا أن ميكروسوفت أعادت كتابة فيجوال بيزيك 14 من الصفر بكود فيجوال بيزيك نفسه، وأدخلت تحسينات عدة على مترجم الكود Compiler وبالتجربة ثبت لهم أن هذا أفضل وأسرع من النسخ القديمة المكتوبة بسي بلاس بلاس.. ورغم أن إصدارات سي شارب الأخيرة مكتوبة بسي شارب، فمن الواضح أنها ما زالت تحتاج إلى مزيد من التحسينات!.. أو ربما أن حلقة التكرار For في فيجوال بيزيك أكفأ من مثيلتها في سي شارب!.. الحكم على السبب يحتاج اختبارات عديدة تشمل جوانب مختلفة من اللغتين.. لكن المؤكد على عكس ما يظنه الكثيرون أن فيجوال بيزيك أقوى من سي شارب، فهي أسرع وأسهل وكودها أكثر اختصارا، وفيها إضافات وتسهيلات ومكتبات فئات عديدة لا يوجد مثيل لها في سي شارب (على سبيل المثال لا الحصر: النطاق My)

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

 

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر