सी ++ में मैं वर्तमान समय प्राप्त करने में सक्षम हूं जब मेरा आवेदन शुरू होता है जिसका मैं उपयोग कर सकता हूं

time_t appStartTime = time(null);

फिर सेकंड में अंतर खोजने के लिए जब से यह शुरू हुआ, मैं वही काम कर सकता हूं, फिर अंतर ढूंढ सकता हूं। ऐसा लगता है कि मुझे सी # नेट में "System.DateTime" का उपयोग करना चाहिए, लेकिन एमएसडीएन इसकी व्याख्या में भ्रमित है।

मैं अपने आवेदन के प्रारंभ होने के समय और वर्तमान समय के बीच के समय (सेकंड में) में अंतर खोजने के लिए System.DateTime का उपयोग कैसे कर सकता हूं?

3
David Boland 13 मार्च 2011, 19:02

5 जवाब

सबसे बढ़िया उत्तर

अभी संपत्ति का उपयोग करें

DateTime startTime = DateTime.Now;

//work

DateTime currentTime = DateTime.Now;

और फिर बस अंतर की गणना करें।

currentTime - startTime;

यदि आप प्रदर्शन को मापना चाहते हैं तो स्टॉपवॉच का उपयोग करने पर विचार करें। .

    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    //work

    stopWatch.Stop();
6
Lukasz Madon 3 जून 2012, 05:17

जैसा कि सभी ने सुझाव दिया... लेकिन वे थोड़े गलत थे :-) DateTime.UtcNow का प्रयोग करें, क्योंकि

  • यह तेज़ है (DateTime.Now कॉल DateTime.UtcNow)
  • यह डीएसटी को चालू/बंद करने के आसपास काम करता है।

या

जैसा कि @शेखर_प्रो ने सुझाव दिया था (हाँ, वह सही थे!), स्टॉपवॉच का उपयोग करें

var sw = Stopwatch.StartNew()
.... your code
sw.Stop();
var ms = sw.ElapsedMilliseconds;

या

var ticks = sw.ElapsedTicks;

ओह ... और मैं भूल रहा था ... आप जो कर रहे हैं वह निश्चित स्थिति में शायद बेकार है ... आप जानते हैं, 2011 प्रोसेसर मल्टीकोर (और यहां तक ​​​​कि 2010 :-)) हैं ... यदि आप ऐप अस्पष्ट रूप से मल्टीथ्रेड हैं तो आप हैं शायद बेहतर माप:

Process.GetCurrentProcess().TotalProcessorTime

इसमें आपके ऐप द्वारा उपयोग किए जाने वाले सभी कोर का उपयोग शामिल है ... इसलिए दोहरे कोर पर, दोनों कोर का उपयोग करके, यह प्रत्येक "वास्तविक समय" सेकंड के लिए 2 सेकंड "लाभ" देगा।

2
xanatos 13 मार्च 2011, 22:12

यदि आप इसका उपयोग प्रदर्शन और कोड निष्पादित करने में लगने वाले समय की जांच के लिए कर रहे हैं तो StopWatch.

अन्यथा System.DateTime में एक सबट्रेक्ट फ़ंक्शन है जिसका उपयोग एक प्राप्त करने के लिए किया जा सकता है TimeSpan ऑब्जेक्ट या यहां तक ​​कि एक साधारण - (घटाना) ) ऑपरेटर करेगा। फिर उस TimeSpan ऑब्जेक्ट में TotalSeconds का गुण होता है जिसे आप इस्तेमाल कर सकते हैं।

1
Shekhar_Pro 13 मार्च 2011, 19:06

ऐसा करने के कई तरीके:

  • डेटटाइम का उपयोग करें। अभी। घटाना एक TimeSpan पैदा करता है। भंडारण के 8 बाइट लेता है, 8000 वर्षों तक का समय, 1 मिलीसेकंड का संकल्प लेकिन अधिकांश मशीनों पर 1/64 सेकेंड तक सटीक।

  • पर्यावरण का प्रयोग करें। टिक काउंट। Time_t के समान लेकिन मशीन बूट समय के सापेक्ष। स्टोरेज के 4 बाइट लेता है, 24 दिनों तक (कास्ट के साथ 49), रिज़ॉल्यूशन और सटीकता डेटटाइम के समान होती है।

  • स्टॉपवॉच का प्रयोग करें। ढेर पर संग्रहीत, संकल्प मशीन पर निर्भर है लेकिन लगभग हमेशा एक माइक्रोसेकंड से नीचे है। सटीकता आमतौर पर अच्छी नहीं होती है, लेकिन शालीनता से दोहराती है, मान लीजिए +/- 5%। तुलना के लिए छोटे अंतरालों को मापने के लिए सबसे अच्छा उपयोग किया जाता है।

  • टाइम गेटटाइम का उपयोग करें। इस मल्टीमीडिया टाइमर का उपयोग करने के लिए पिनवोक की आवश्यकता होती है। Environment.TickCount के समान, आप timeBeginPeriod का उपयोग करके 1 मिसे सटीकता प्राप्त कर सकते हैं। यह सस्ता नहीं है क्योंकि इसका सिस्टम-वाइड प्रभाव है। सबसे अच्छा परहेज किया।

ध्यान रखें कि प्रक्रिया निष्पादन समग्र ऑपरेटिंग सिस्टम लोड की अनिश्चितताओं के अधीन है, आपका प्रोग्राम चल रही अन्य 70-विषम प्रक्रियाओं के साथ संसाधनों को साझा कर रहा है। इसके लिए डेटटाइम या टिककाउंट में बहुत सटीकता है।

1
Hans Passant 13 मार्च 2011, 19:32
DateTime startTime = DateTime.Now;
//some code
TimeSpan difference = DateTime.Now - startTime;
int seconds = difference.TotalSeconds.Truncate();
0
Femaref 13 मार्च 2011, 19:05