2009-03-18 12 views
38
my $start_time = [Time::HiRes::gettimeofday()]; 
my $diff = Time::HiRes::tv_interval($start_time); 

print "\n\n$diff\n"; 
+5

बेहतर? – ysth

उत्तर

60

संभवतः। "बेहतर" से आपका क्या मतलब है इस पर निर्भर करता है।

यदि आप कार्यक्षमता के मामले में "बेहतर" समाधान मांग रहे हैं, तो यह बहुत अधिक है।

आप एक "बेहतर" अंकन की "कम अजीब" अर्थ में के लिए पूछ रहे हैं, तो जानते हैं कि, अदिश संदर्भ में, Time::HiRes::gettimeofday() चल सेकंड अवधि के बाद वापस आ जाएगी (आंशिक हिस्सा माइक्रोसेकंड का प्रतिनिधित्व करने के साथ), बस Time::HiRes::time() की तरह (जो मानक time() समारोह के लिए एक अच्छा ड्रॉप-में प्रतिस्थापन है।)

my $start = Time::HiRes::gettimeofday(); 
... 
my $end = Time::HiRes::gettimeofday(); 
printf("%.2f\n", $end - $start); 

या:

use Time::HiRes qw(time); 

my $start = time(); 
... 
my $end = time(); 
printf("%.2f\n", $end - $start); 
1

यह बहुत अधिक है - जो आपको उच्च रिज़ॉल्यूशन समाप्त कर देगा। बेशक, कोई भी सिस्टम घड़ी के साथ गड़बड़ नहीं करता है।

18

आप क्या कर रहे हैं पर निर्भर करता है करते हुए। यदि आप दीवार घड़ी के समय को मापना चाहते हैं (वास्तविक समय की मात्रा जो समाप्त हो गई है) तो आप अधिक बेहतर नहीं हो सकते हैं। यदि आप यह मापना चाहते हैं कि कंप्यूटर कितना समय से कुछ कर रहा है तो आप times फ़ंक्शन या time कमांड को देखना चाहेंगे। times पर्ल में फ़ंक्शन आपके कोड में इस प्रक्रिया के लिए वर्तमान संचित समय की एक सूची और आपके द्वारा उपयोग किए जा रहे किसी भी मॉड्यूल का कोड, सिस्टम कॉल में यह प्रक्रिया, इस प्रक्रिया के बच्चों को उपयोगकर्ता कोड में, और इस प्रक्रिया के सभी बच्चों की एक सूची देता है सिस्टम कॉल में

#!/usr/bin/perl 

use strict; 
use warnings; 
use Time::HiRes; 

my $start_time = [Time::HiRes::gettimeofday()]; 
. 
. 
. 
my ($user, $system, $child_user, $child_system) = times; 
print "wall clock time was ", Time::HiRes::tv_interval($start_time), "\n", 
    "user time for $$ was $user\n", 
    "system time for $$ was $system\n", 
    "user time for all children was $child_user\n", 
    "system time for all children was $child_system\n"; 

यूनिक्स में time कमांड कार्य में समान है। आप इस

time ./script.pl 

की तरह एक आदेश चला और यह इस

real 0m0.692s 
user 0m0.019s 
sys  0m0.109s 

जहां वास्तविक दीवार घड़ी समय और उपयोगकर्ता और सिस ऊपर उपयोगकर्ता और सिस्टम के रूप में ही कर रहे हैं की तरह कुछ आउटपुट।

time आदेश एक मानव का उपयोग करने के लिए आसान है, लेकिन times समारोह आप अधिक जानकारी देता है और एक कंप्यूटर प्रोग्राम में फिट करने के लिए आसान है (प्लस यह जबकि एक कार्यक्रम अभी भी चल रहा है परिणामों के उत्पादन को लाभ मिलता है)।

ओह, मैं $^T का उल्लेख करना भूल गया। यह चर अवधि के बाद सेकंड में कार्यक्रम की शुरुआत समय रखती है, इसलिए यदि आप केवल कुछ सेकंड के एक विवरण के स्तर को के बारे में परवाह तुम सिर्फ अपने कार्यक्रम के शीर्ष के निकट कह सकते हैं

END { print "The program ran for ", time() - $^T, " seconds\n" } 

0

यह सेवाकालीन समय, एक दूसरे के विवरण का स्तर के लिए उपयोगी है:

शुरू में ...

$debugtimer = time; 
$debugstr = ""; 

... कहीं भी और हर जगह आप की तरह ...

kerchunk("message") # message is short description of location in code 

... कार्यक्रम के अंत ...

print "timings: $debugstr"; 

... और अपने बाद के चरणों के साथ:

क्या अर्थ में
sub kerchunk 
{ 
    my ($msg) = shift; 
    my $pertock = time; 
    my $kch = abs($debugtimer - $pertock); 
    $debugstr .= "Elapsed at $msg: $kch<br>\n"; 
} 
संबंधित मुद्दे