رمز الوقت في مخطط PLT
سؤال
أريد أن أرى المدة التي تستغرقها الوظيفة للتشغيل.ما هي أسهل طريقة للقيام بذلك في نظام PLT؟من الناحية المثالية، أريد أن أكون قادرًا على القيام بشيء مثل هذا:
> (define (loopy times)
(if (zero? times)
0
(loopy (sub1 times))))
> (loopy 5000000)
0 ;(after about a second)
> (timed (loopy 5000000))
Took: 0.93 seconds
0
>
لا يهم إذا كان علي استخدام بعض تركيبات الجملة الأخرى مثل (timed loopy 5000000)
أو (timed '(loopy 5000000))
, أو إذا أعاد الوقت المستغرق في سلبيات أو شيء من هذا.
المحلول
واسم موحد لتوقيت تنفيذ التعبيرات في معظم تطبيقات نظام هو "الوقت". هنا مثال من داخل DrRacket.
<اقتباس فقرة>و(تعريف (مرات loopy) (إذا كان (صفر؟ مرات) 0 (loopy (مرات sub1))))
و(الوقت (loopy 5000000)) وقت وحدة المعالجة المركزية: 1526 في الوقت الحقيقي: 1657 الوقت GC: 0 0
اقتباس فقرة>إذا كنت تستخدم وقت لتطبيقات مختلفة القياسي ضد بعضها البعض، تذكر أن استخدام مضرب من سطر الأوامر بدلا من القياس مباشرة في DrRacket (DrRacket إدراج رمز التصحيح من أجل إعطاء رسائل الخطأ أفضل).
نصائح أخرى
وجدته...
(time-apply proc arg-list)
يستدعي الإجراء proc مع الوسائط الموجودة في arg-list.يتم إرجاع أربع قيم:قائمة تحتوي على نتيجة (نتائج) تطبيق proc، وعدد المللي ثانية من وقت وحدة المعالجة المركزية المطلوبة للحصول على هذه النتيجة، وعدد المللي ثانية "الحقيقية" المطلوبة للنتيجة، وعدد المللي ثانية من وقت وحدة المعالجة المركزية (المضمنة في النتيجة الأولى) قضى على جمع القمامة.
مثال على الاستخدام:
> (time-apply loopy '(5000000))
(0)
621
887
0