2010-06-30 23 views
6

के साथ प्रोग्राम की तुलना में कंप्यूटर की अधिकतम हार्ड ड्राइव डेटा स्थानांतरण दर निर्धारित करना मैंने सी # का उपयोग करके एक छोटा WPF विजेट लिखा है जो वर्तमान सीपीयू गतिविधि, रैम प्रयुक्त और डिस्क गतिविधि को तीन छोटे प्रतिशत प्रकार के सलाखों के रूप में प्रदर्शित करता है। मैं इसके लिए निम्नलिखित PerformanceCounters का इस्तेमाल किया है: (diskCounter PerformanceCounter बाइट प्रति सेकंड में वर्तमान कुल डिस्क गतिविधि रिटर्न)सी #

private void InitialisePerformanceCounters() 
{ 
    cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", true); 
    totalRam = (int)(new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory/1024/1024); 
    ramCounter = new PerformanceCounter("Memory", "Available MBytes"); 
    diskCounter = new PerformanceCounter("PhysicalDisk", "Disk Bytes/sec", "_Total", true); 
} 

समस्या यह है कि हालांकि मुझे पता चला है कि कैसे से अधिक इस्तेमाल किया प्रतिशत की गणना करने के लिए उपलब्ध कुल रैम प्राप्त करने के लिए है , मैं डिस्क की 'सैद्धांतिक' अधिकतम डेटा स्थानांतरण दर को पढ़ने के तरीके को नहीं ढूंढ सकता। मुझे उपयोग की जाने वाली डिस्क ट्रांसफर दर के प्रतिशत की गणना करने की आवश्यकता है। किसी भी मदद की सराहना की जाएगी।

उत्तर

2

ऐसा करने का एकमात्र तरीका यह स्वयं परीक्षण करना होगा। आप अपने आवेदन की शुरुआत में कुछ इस तरह कर सकता है:

byte[] data = new byte[1024]; 

string path = System.IO.Path.GetTempFileName(); 

int bytesPerSecond = 0; 

using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create)) 
{ 
    System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); 

    watch.Start(); 

    for (int i = 0; i < 1024; i++) fs.Write(data, 0, data.Length); 

    fs.Flush(); 

    watch.Stop(); 

    bytesPerSecond = (int)((data.Length * 1024)/watch.Elapsed.TotalSeconds); 
} 

System.IO.File.Delete(path); 

यह है, लेकिन, मान लेते हैं कि Temp निर्देशिका सवाल में डिस्क पर है। यदि नहीं, तो आपको उस डिस्क पर पथ बनाना होगा जिसे आप मापना चाहते हैं। ध्यान दें कि यह लिखने की गति को माप रहा है, गति को नहीं पढ़ता है।

यह कुछ हद तक योगदान हुआ है क्योंकि 1 एमबी लिखने के लिए ज्यादा डेटा नहीं है, लेकिन आप इसे बड़ी मात्रा में डेटा से आजमा सकते हैं; अवधारणा वही है।

+0

आपको अधिकतम संभव दर कैसे मिलेगी? AFAIK यह एचडी की वर्तमान स्थिति पर निर्भर करता है, इसलिए इससे आपको कम या ज्यादा गलत परिणाम मिलेगा, या नहीं? – InsertNickHere

+0

@InsertNickHere: अधिकतम संभव दर को मापने का एकमात्र तरीका संपूर्ण डिस्क को लिखना और अंतराल में मापना होगा। आप सही हैं कि यह कई कारकों पर निर्भर करता है, लेकिन इसे कम से कम उपयोग करने योग्य अनुमान देना चाहिए। –

+0

धन्यवाद एडम, लेकिन मुझे कुछ भी सटीक की आवश्यकता नहीं है ... जोनाथन द्वारा सुझाए गए सैद्धांतिक अधिकतम दर ठीक है। – Sheridan

1

WMI एपीआई का उपयोग करने का प्रयास करें, LINQ to WMI सहायक भी हो सकता है।

+0

लिंक के लिए धन्यवाद ... मैंने उन्हें बुकमार्क किया है। :) – Sheridan

1

मुझे एचडी की अधिकतम डेटा ट्रांसफर दर प्राप्त करने का कोई तरीका नहीं पता है, लेकिन डब्लूएमआई के साथ आप हार्ड डिस्क (यूएसबी, आईडीई ...) के इंटरेफेस प्राप्त कर सकते हैं। आप इंटरफ़ेस की अधिकतम डेटा ट्रांसफर दर का उपयोग कर सकते हैं और इसके प्रतिशत को फिर से भर सकते हैं।

इसके अलावा, मैं स्रोत कोड के साथ WMI का उपयोग करके एचडी जानकारी प्राप्त करने के बारे में एक छोटे से लेख में एक लिंक छोड़ने जा रहा हूं। LINK

+0

धन्यवाद, ऐसा लगता है कि मैं क्या कर रहा हूं। लिंक के लिए भी धन्यवाद, लेकिन यदि आप Win32_LogicalDisk क्लास के बारे में बात कर रहे हैं, तो मुझे उस क्षेत्र को उपयुक्त फ़ील्ड/विशेषता नहीं मिली है ... क्या आपको यह पता चल जाएगा? – Sheridan

+1

मुझे लगता है कि इसका इंटरफेसटाइप - http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx यहां एक उदाहरण है: http://www.geekpedia.com/tutorial73_An-introduction-in -पुनर्प्राप्ति-WMI-in-Csharp.html – SwDevMan81

+0

धन्यवाद SwDevMan81, मैं इसे एक दूंगा। – Sheridan

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

  • कोई संबंधित समस्या नहीं^_^