تحديد معدل نقل بيانات محرك الأقراص الثابتة الحد الأقصى لجهاز الكمبيوتر برمجيًا مع C#

StackOverflow https://stackoverflow.com/questions/3150956

سؤال

لقد كتبت عنصرًا صغيرًا من WPF باستخدام C# يعرض نشاط وحدة المعالجة المركزية الحالية ، وذاكرة الوصول العشوائي المستخدمة ونشاط القرص كثلاثة قضبان نوع مئوية صغيرة. لقد استخدمت أداء الأداء التالي لهذا: (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);
}

المشكلة هي أنه على الرغم من أنني اكتشفت كيفية الحصول على إجمالي ذاكرة الوصول العشوائي المتاحة لحساب النسبة المئوية المستخدمة من ، لا يمكنني معرفة كيفية قراءة معدل نقل البيانات "النظري" للقرص. أحتاج هذا لحساب النسبة المئوية لمعدل نقل القرص المستخدم. أي مساعدة سيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

الطريقة الوحيدة للقيام بذلك هي اختباره بنفسك. يمكنك أن تفعل شيئًا كهذا في بداية طلبك:

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 ميغابايت ليس الكثير من البيانات للكتابة ، ولكن يمكنك تجربتها بكمية أكبر من البيانات ؛ المفهوم هو نفسه.

نصائح أخرى

حاول استخدام WMI API ، أيضا LINQ إلى WMI يمكن أن تكون مفيدة.

لا أعرف أي طريقة للحصول على الحد الأقصى لمعدل نقل البيانات من HD ، ولكن مع WMI يمكنك الحصول على الواجهة من القرص الثابت (USB ، IDE ...). يمكنك استخدام الحد الأقصى لمعدل نقل البيانات للواجهة وإعادة تدوين النسبة المئوية لها.

أيضًا ، سأترك رابطًا هنا إلى مقالة صغيرة حول الحصول على معلومات FRM HD باستخدام WMI ، مع رمز المصدر. حلقة الوصل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top