नियमित डेस्कटॉप डेटाबेस अनुप्रयोगों के लिए, किसी कार्य के निष्पादन समय में एक सेकंड को जोड़ने पर शायद ही कभी उपयोगकर्ताओं को समाप्त करने के लिए कोई फर्क पड़ता है - लेकिन जब आपको लाखों पेड़ की पत्तियों को संसाधित करने या अरबों अद्वितीय यादृच्छिक संख्याओं को उत्पन्न करने की आवश्यकता होती है, तो गति-से-निष्पादन अधिक महत्वपूर्ण हो जाता है।
आपके कोड का समय समाप्त करना
कुछ अनुप्रयोगों में, बहुत सटीक, उच्च-सटीक समय माप विधियाँ महत्वपूर्ण और सौभाग्य से हैं डेल्फी इन समयों को प्राप्त करने के लिए एक उच्च-प्रदर्शन काउंटर प्रदान करता है।
RTL का उपयोग करना अभी समारोह
एक विकल्प का उपयोग करता है अभी समारोह। अभीमें परिभाषित किया गया है SysUtils इकाई, वर्तमान प्रणाली की तारीख और समय लौटाता है।
कोड की कुछ पंक्तियाँ किसी प्रक्रिया के "प्रारंभ" और "स्टॉप" के बीच का समय व्यतीत करती हैं:
नाउ फ़ंक्शन वर्तमान सिस्टम दिनांक और समय को 10 मिलीसेकंड (विंडोज़ एनटी और बाद में) या 55 मिलीसेकंड (विंडोज 98) तक सही है।
बहुत छोटे अंतराल के लिए "अब" की सटीकता कभी-कभी पर्याप्त नहीं होती है।
Windows API GetTickCount का उपयोग करना
और भी सटीक डेटा के लिए, का उपयोग करें GetTickCountविंडोज एपीआई समारोह। GetTickCount उस मिलीसेकंड की संख्या को पुनर्प्राप्त करता है जो सिस्टम शुरू होने के बाद समाप्त हो गया है, लेकिन फ़ंक्शन केवल है यदि कंप्यूटर लंबे समय तक संचालित रहता है तो 1 एमएस की शुद्धता और हमेशा सटीक नहीं हो सकती है समय।
बीता हुआ समय DWORD (32-बिट) मान के रूप में संग्रहीत किया जाता है। इसलिए, यदि विंडोज 49.7 दिनों तक लगातार चलाया जाता है, तो समय शून्य के आसपास लपेट जाएगा।
GetTickCount सिस्टम टाइमर (10/55 ms) की सटीकता तक भी सीमित है।
अपने कोड से उच्च परिशुद्धता समय
यदि आपका पीसी उच्च-रिज़ॉल्यूशन प्रदर्शन काउंटर का समर्थन करता है, तो उपयोग करें QueryPerformanceFrequency प्रति सेकंड की गणना में, आवृत्ति को व्यक्त करने के लिए विंडोज एपीआई कार्य करता है। गिनती का मूल्य प्रोसेसर पर निर्भर है।
QueryPerformanceCounter फ़ंक्शन उच्च-रिज़ॉल्यूशन प्रदर्शन काउंटर के वर्तमान मान को पुनर्प्राप्त करता है। इस फ़ंक्शन को कोड के एक खंड की शुरुआत और अंत में कॉल करके, एक एप्लिकेशन उच्च-रिज़ॉल्यूशन टाइमर के रूप में काउंटर का उपयोग करता है।
उच्च-रिज़ॉल्यूशन टाइमर की सटीकता कुछ सौ नैनोसेकंड के आसपास है। एक नैनोसेकंड 0.000000001 सेकंड का प्रतिनिधित्व करने वाली इकाई है - या एक सेकंड का 1 बिलियन।
TStopWatch: एक उच्च-रिज़ॉल्यूशन काउंटर का डेल्फी कार्यान्वयन
एक नोड के साथ। नेट नामकरण सम्मेलनों, एक काउंटर की तरह TStopWatch सटीक समय मापन के लिए एक उच्च-रिज़ॉल्यूशन डेल्फी समाधान प्रदान करता है।
TStopWatch अंतर्निहित टाइमर तंत्र में टाइमर टिकों की गिनती करके समय को मापता है।
- IsHighResolution प्रॉपर्टी इंगित करती है कि टाइमर एक उच्च-रिज़ॉल्यूशन प्रदर्शन काउंटर पर आधारित है या नहीं।
- शुरू विधि बीता हुआ समय मापने लगती है।
- रुकें विधि बीता समय मापने को रोकता है।
- ElapsedMilliseconds संपत्ति मिलीसेकंड में कुल बीता समय हो जाता है।
- गुजर चुके प्रॉपर्टी को टाइमर टिक में कुल बीता समय मिलता है।
यहाँ उपयोग का एक उदाहरण है: