سؤال

في حين أن السؤال تحقق مما إذا كان الإدخال هو نوع السلسلة تم إغلاق اثنين من الإجابات ارتفعت سؤال التحسين الجزئي في ذهني:أي من الحلين أدناه من شأنه أن يؤدي بشكل أفضل?

ريد كوبسي قدمت أ الحل باستخدام Char.IsLetter:

string myString = "RandomStringOfLetters";
bool allLetters = myString.All( c => Char.IsLetter(c) );

مقتبس الحل باستخدام التعبير العادي من عند مارك بايرز:

string s = "RandomStringOfLetters";
bool allLetters = Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase);

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

البعض من أخذ الطابع الزمني قبل وبعد تشغيل كل, ما هي بعض الدول الأخرى (أفضل?) خيارات تحديد الحل الذي يعمل بشكل أسرع?

تحرير

أنا تعديل إجابة مارتن للعمل مع Console.WriteLine(...) وركض على أنها تطبيق وحدة التحكم.لست متأكدا بالضبط كيف لينكباد تشغيل التطبيقات ولكن النتائج كانت عن نفسه:

41
178
هل كانت مفيدة؟

المحلول

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

  1. قم دائمًا بإجراء الاختبار الخاص بك أكثر من مرة واحدة.في المرة الأولى التي تقوم فيها بتشغيله، سيكون هناك حمل من JIT، وقد تكون التوقيتات مضللة.يعد الجري عدة مرات وأخذ المتوسط ​​أسلوبًا جيدًا (سأجري غالبًا اختبارًا مثل هذا 100000 مرة، على سبيل المثال).
  2. قم دائمًا بإجراء الاختبار باستخدام إصدار إصدار كامل، خارج عملية استضافة Visual Studio.(افتراضيًا، يمكنك استخدام Ctrl+F5 لهذا الغرض.) يؤثر مضيف Visual Studio بشكل كبير على التوقيتات.

نصائح أخرى

يجب عليك التحقق من System.Diagnostics.Stopwatch!

http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

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

نأمل أن يساعد.

أنا فقط وضعت هذا معا في LinQPad كمثال على كيفية القيام بذلك (وبالتاليالمكالمات إلى تفريغ () - استبدل مع Console .Writeline (...) إذا كنت لا تستخدم هذه الأداة المفيدة).

يشبه الطريق LinQ أكثر قليلا من أربع مرات بشكل أسرع:

giveacodicetagpre.

الإخراج:

giveacodicetagpre.

هناك system.diagnostics.stopwatch الفئة التي يمكن استخدامها.

مهما كانت التعليمات البرمجية التي تختبرها، قم بتشغيل الاختبار مرة واحدة لإزالة تكاليف JIT ثم قم بتشغيله مرة أخرى للتوقيت النهائي.يمكن أن تكون معظم التوقيت الفردي في التوقيت غير مبرر بسبب عوامل أخرى على جهاز الكمبيوتر - قم بتشغيل العديد من التكرارات، ثم احسب متوسط وقت التشغيل من ذلك.

استخدم System.Diagnostics.stopwatch Class.

ابدأ ساعة التوقيت وتشغيل عدة آلاف من التكرارات، وإيقافها وتحقق من إجمالي المللي ثانية التي انزلت

خطوات لتحديد ما هو أسرع: -

  1. احصل على مجموعة من أجهزة الكمبيوتر، وينبغي القيام بضع مئات، AMD / Intel / Other، 32 بت / 64 بت، ...

  2. قم بتثبيت كل إطار .NET تهتم به على كل منها (بدوره)

  3. جرب كل مزيج من خيارات التحسين للتجميع (بدوره)

  4. استخدم ساعة توقيت لاختبار تشغيل كبير لكل

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

  6. قد تعطيك فكرة أسرع في الممارسة العملية، على الأقل للحصول على الإصدارات الحالية للمترجم.كرر مع كل إصدار جديد من المحول البرمجي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top