2010-02-08 12 views
7

उप मिलीसेकंद सटीकता के साथ समय संचालन करने के लिए सी # में कहीं भी है? मैं अपने सॉफ्टवेयर में समय कोड डाल रहा हूं और सब कुछ 0 एमएमएस के रूप में वापस किया जा रहा है। मैं जानना चाहता हूं कि यहां तक ​​कि बेहतर ग्रैन्युलरिटी पाने का कोई तरीका है या नहीं।सी # सब मिलीसेकंद समय

परिशिष्ट: क्या यह उप मिलीसेकंद समय प्राप्त करने के लिए सही कोड है?

timeSpan.TotalMilliseconds/10 

मैं अभी भी बीता हुआ समय

+1

आप इसे गलत कर रहे हैं, जेआईटी, जीसी, थ्रेड संदर्भ स्विचिंग, अन्य धागे व्यस्त होने जैसी कई बार बहुत कम चीजें प्रभावित करने जा रही हैं। आपको अपनी समस्या का विस्तार करना चाहिए, कुछ हज़ारों को निष्पादित करना चाहिए या आपके कोड पर हजारों पुनरावृत्तियों, समय है कि। –

+0

आप इसके बजाय एक प्रोफाइलर का उपयोग करने पर विचार कर सकते हैं। कई वाणिज्यिक पेशकशें हैं, और http://www.eqatec.com/tools/profiler – TrueWill

उत्तर

16

तुम हमेशा एक प्रबंधित दृष्टिकोण

+6

पर एक निःशुल्क एक है .NET 2.0 के रूप में QueryPerformanceCounter का उपयोग करने का कोई कारण नहीं है। स्टॉपवॉच अंतर्निहित है और वही काम करता है। दोनों टाइमर की आवृत्ति बिल्कुल वही है। –

+0

दरअसल लेकिन उन्होंने विशेष रूप से यह नहीं बताया कि वह .NET 2.0 का उपयोग कर रहा था :) फिर भी मैंने यह निर्दिष्ट नहीं किया कि 2.0+ उचित है। – tyranid

+0

@tyranid, तकनीकी रूप से उन्होंने .NET को निर्दिष्ट नहीं किया है, उन्होंने अभी सी # कहा है। सैद्धांतिक रूप से वह अन्य सी # कंपाइलरों में से एक का उपयोग कर सकता है जो किसी और चीज को संकलित करता है (मैंने उन लोगों को देखा है जो जावास्क्रिप्ट और एफवीएम बाइटकोड में संकलित हैं)। –

3

आमतौर पर मैं इन प्रकार के उपाय के रूप में की कोशिश कर सकते 0 हो रही है ऑपरेशन को कई बार दोहरा कर परिदृश्यों के रूप में (कुछ दर्जन या सौ से अधिक मिलीसेकंड प्राप्त करने के लिए आवश्यक है।

फिर आप अधिक आसानी से समायोजित और माप सकते हैं।

1

आप मिलीसेकंड की बजाय टिक के मामले में अपना प्रदर्शन मापने का प्रयास कर सकते हैं। प्रदर्शन के मामले में यह अधिक सटीक होगा।

लेकिन मैं सैम और टायरानिड से सहमत हूं, सिस्टम का उपयोग करें। डायग्नोस्टिक्स। स्टॉपवॉच।

0

मैंने कुछ नया सीखा। उन टिकों वास्तव में आसान हैं। पूरा उदाहरण:

Stopwatch stopwatch = Stopwatch.StartNew(); 

// Run code to get duration of 

long durationInTicks = stopwatch.ElapsedTicks; 
Console.WriteLine($"Duration: {(decimal)durationInTicks/TimeSpan.TicksPerMillisecond:f3}ms"); 

तुम भी Console.WriteLine अंदर stopwatch.ElapsedTicks उपयोग कर सकते हैं, लेकिन मैं नहीं जानता कि यदि कोई प्रदर्शन विलंब से है, यही कारण है कि मैं पहली बार इसे पुनः प्राप्त करने और एक चर में रख रहे हैं।

संबंधित मुद्दे