2012-02-14 14 views
13

जैसा कि हम सभी जानते हैं स्टॉपवॉच में बहु-थ्रेडेड एसिंक एप्लिकेशन में समस्याएं हो सकती हैं जो सभी कोरों पर चल रही हैं।मल्टीकोर और थ्रेड जागरूक .Net stopwatch?

एक मल्टीप्रोसेसर कंप्यूटर पर, इससे कोई फ़र्क नहीं पड़ता कि थ्रेड किस प्रोसेसर पर चलता है। हालांकि, BIOS या हार्डवेयर एब्स्ट्रक्शन लेयर (एचएएल) में कीड़े की वजह से, आप विभिन्न प्रोसेसर पर अलग-अलग समय के परिणाम प्राप्त कर सकते हैं। थ्रेड के लिए प्रोसेसर एफ़िनिटी निर्दिष्ट करने के लिए, ProcessThread.ProcessorAffinity विधि का उपयोग करें।

मेरे लिए किसी भी तरह से मूल्यों उच्च संकल्प/सटीकता के साथ ही है कि जैसे कुछ विश्वसनीय टिक/टाइमस्टैम्प प्राप्त करने के लिए कर रहे हैं सीपीयू कोर भर में लगातार है?

स्टॉपवॉच (क्वेरीरीफॉर्मेंस काउंटर) बहु-कोर सुरक्षित बनाने के लिए संभव नहीं है, तो कोरों में एक अच्छा टाइमस्टैम्प प्राप्त करने का अगला सबसे अच्छा तरीका क्या है? DateTime.UtcNow.Ticks या पर्यावरण। टिककाउंट? कोई अन्य काउंटर?

मुझे डेटटाइम.यूटीसीएनओ.कॉम की तुलना में बेहतर रिज़ॉल्यूशन की आवश्यकता है। (10-15ms)

उत्तर

7

मैंने खुद को इस विशिष्ट समस्या का उत्तर खोजा है और मैंने जो देखा है वह सबसे अच्छा है DateTime.UtcNow। ऐसा लगता है कि कोई विंडोज़ खुला उच्च रिज़ॉल्यूशन नहीं है और विश्वसनीय काउंटर (मैंने उम्र के लिए एक के लिए गुगल किया है और अभी भी किसी भी में नहीं आया है)।

+0

उपयोग करने का नमूना कोड? –

5

दरअसल, official documentation के अनुसार, विंडोज़ XP के बाद, मल्टीप्रोसेसर सिस्टम पर स्टॉपवॉच/क्वेरीरीफॉर्मेंस काउंटर का उपयोग करना ठीक होना चाहिए। अगर सिस्टम इनवेरिएंट टीएससी का समर्थन नहीं करता है, तो क्यूपीसी स्वचालित रूप से एक अलग टाइमर रणनीति का उपयोग करेगा।

हालांकि वर्चुअलाइज्ड सिस्टम के लिए टिप्पणी अनुभाग नोट करें। ऐसा लगता है कि आपको उस विशिष्ट मामले में सावधान रहना होगा।