يجب أن تكون سرعة تشغيل البرنامج ضمن نطاق مقبول للمستخدم. في كثير من الأحيان، يؤدي تحسين سرعة تلك الإجراءات الروتينية قصيرة العمر والمستخدمة بشكل متكرر إلى زيادة السرعة الإجمالية للبرنامج بشكل كبير.
لتحسين السرعة، بالطبع، عليك أولاً أن تكون قادرًا على قياس الوقت. حسنًا، فلننظر إلى الوضع على المسار بمجرد إطلاق النار، اضغط على ساعة الإيقاف لبدء التوقيت، وإنهاء التوقيت عندما يصل اللاعب إلى خط النهاية. في هذا الوقت، يمكنك معرفة الوقت الذي استخدمه اللاعب . قبل البدء في الجولة التالية، يجب إعادة ضبط ساعة الإيقاف على الصفر. يوفر .NET2.0 أيضًا ساعة توقيت كهذه: فئة ساعة الإيقاف، والتي يمكنها قياس الوقت بدقة أكبر.
اختبار السرعة:
يعد أداء البرنامج وقابليته للاختبار موضوعًا معقدًا. يتطلب التأكد من أن التطبيق يلبي توقعات المستخدم النظر في أدائه وقابليته للاختبار أثناء دورة التطوير. وهذا أمر بالغ الأهمية خلال مرحلة التصميم، ومن المؤكد أن التصميم السيئ سيؤدي إلى تجربة مستخدم سيئة. ومع ذلك، فإن التصميم الجيد وحده لا يضمن تشغيل البرنامج بكفاءة، كما أن جودة الكود النهائي لها نفس القدر من الأهمية.
يعد قياس روتين طويل الأمد أمرًا بسيطًا إلى حد ما. إذا استمرت العملية عدة دقائق، فيمكن استخدام الساعة لتسجيل الوقت. على سبيل المثال، بالنسبة لعملية تستغرق دقيقتين للتنفيذ، يمكن للتحسين بنسبة 10% أن يوفر 12 ثانية، وهو أمر يسهل تحديده.
وإذا كنت تريد قياس عملية قصيرة المدى جدًا، عليك أن تفكر في دقة أفضل. على سبيل المثال، هناك بعض الإجراءات الصغيرة جدًا التي قد يستغرق تشغيلها جزءًا من الألف من الثانية فقط، ولكن سيتم استدعاؤها مليون مرة، ويكون التأثير التراكمي واضحًا. في الإصدارات السابقة من إطار عمل .NET، كنت بحاجة إلى استخدام وظائف Windows API، وفي .NET Framework 2.0، قدمت Microsoft فئة ساعة الإيقاف (وهي ساعة الإيقاف الخاصة بنا) لتبسيط مهام قياس الوقت.
فئة ساعة الإيقاف:
يعد استخدام فئة Stopwatch لقياس الوقت أمرًا بسيطًا للغاية. مثل ساعات الإيقاف في الحياة الواقعية، يمكن أيضًا لكائنات هذه الفئة أن تبدأ وتتوقف وتعود إلى الصفر (إعادة ضبط) العداد، ولكنها أكثر دقة من ساعات الإيقاف العادية ويمكن أن تصل دقتها إلى ميكروثانية (أي ملايين الثواني). جزء من الثانية).
رمز العينة:
لتوضيح استخدام ساعة الإيقاف، دعونا نستخدم جزءًا من التعليمات البرمجية. إليك تطبيق وحدة تحكم يجمع كل الأعداد الصحيحة بين 1 و1 مليون:
باستخدام النظام؛
مساحة الاسم StopWatchClass
{
برنامج الصف
{
الفراغ الثابت الرئيسي (سلسلة [] الحجج)
{
المجموع الطويل = 0؛
لـ (int i = 1; i <= 10000000; i++)
{
المجموع += أنا؛
}
}
}
}
إضافة كائن ساعة الإيقاف:
توجد فئة Stopwatch في مساحة الاسم System.Diagnostics. هذا هو الكود بعد إضافة الكائن:
باستخدام النظام؛
باستخدام System.Diagnostics
مساحة الاسم StopWatchClass
{
برنامج الصف
{
الفراغ الثابت الرئيسي (سلسلة [] الحجج)
{
مؤقت ساعة الإيقاف = ساعة الإيقاف الجديدة () ؛
المجموع الطويل = 0؛
لـ (int i = 1; i <= 10000000; i++)
{
المجموع += أنا؛
}
}
}
}
التحكم في كائن ساعة الإيقاف:
توفر ساعة الإيقاف عدة طرق للتحكم في كائن ساعة الإيقاف. يبدأ الأسلوب "ابدأ" عملية التوقيت، ويتوقف الأسلوب "Stop" عن التوقيت. في هذا الوقت، إذا تم استخدام طريقة البدء للمرة الثانية، فسيستمر التوقيت، وتكون نتيجة التوقيت النهائية هي تراكم التوقيتين. لتجنب هذا الموقف، استخدم أسلوب إعادة التعيين لإعادة تعيين الكائن إلى الصفر قبل جهاز ضبط الوقت الثاني. لا تتطلب أي من هذه الطرق الثلاث معلمات. الكود هو:
باستخدام النظام؛
باستخدام System.Diagnostics
مساحة الاسم StopWatchClass
{
برنامج الصف
{
الفراغ الثابت الرئيسي (سلسلة [] الحجج)
{
مؤقت ساعة الإيقاف = ساعة الإيقاف الجديدة () ؛
المجموع الطويل = 0
؛
لـ (int i = 1؛ i <= 10000000؛ i++)
{
المجموع += أنا؛
}
timer.Stop();
}
}
}
قراءة نتائج ساعة الإيقاف:
<!--[if !supportLists]--><!--[endif]--> بعد انتهاء التوقيت، الخطوة التالية هي قراءة نتائج التوقيت. توفر فئة Stopwatch الخصائص التالية:
<!--[if !supportLists]--><!--[endif]--><!--[if !supportLists]--><!--[endif]-->
المنقضي: إرجاع كائن TimeSpan، الذي يمثل الفاصل الزمني؛
المللي ثانية المنقضية: يُرجع عدد الميكروثانية التي مرت بالتوقيت، وتكون الدقة أقل قليلاً، ومناسبة للتوقيت الأطول قليلاً؛
ElapsedTicks: إرجاع عدد علامات التجزئة المنقضية. علامة المؤقت هي أصغر وحدة قياس ممكنة لكائن ساعة الإيقاف. يتم تحديد طول علامة المؤقت بواسطة الكمبيوتر ونظام التشغيل المحددين. تمثل قيمة حقل التردد الثابت لكائن ساعة الإيقاف عدد دقات المؤقت الموجودة في ثانية واحدة. لاحظ الفرق في الوحدات الزمنية المستخدمة بواسطة خاصية Ticks الخاصة بـ TimeSpan.
يجب تحديد إحدى هذه الخصائص بناءً على مهمة التوقيت. في برنامج المثال الخاص بنا، توفر الخاصية المنقضية الدقة المطلوبة لإخراج عدد الميكروثانية المنقضية. وهذه أيضًا أعلى دقة في TimeSpan.
وهذا هو الكود النهائي للبرنامج:
باستخدام النظام؛
باستخدام System.Diagnostics
مساحة الاسم StopWatchClass
{
برنامج الصف
{
الفراغ الثابت الرئيسي (سلسلة [] الحجج)
{
مؤقت ساعة الإيقاف = ساعة الإيقاف الجديدة () ؛
المجموع الطويل = 0
؛
لـ (int i = 1؛ i <= 10000000؛ i++)
{
المجموع += أنا؛
}
timer.Stop();
decimal micro = timer.Elapsed.Ticks / 10m;
Console.WriteLine("وقت التنفيذ كان {0:F1} ميكروثانية.", micro);
}
}
}
بالإضافة إلى ذلك، استخدم خاصية IsRunning للتحقق مما إذا كان مثيل Stopwatch هو التوقيت، واستخدم الأسلوب StartNew لبدء مؤقت جديد.