Определение максимальной скорости передачи данных жесткого диска компьютера программно с C#

Я записал маленький виджет WPF с помощью C#, который отображает текущую активность ЦП, RAM используемая и активность диска как три печатающих штанги небольшого процента. Я использовал следующий 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);
}

Проблема состоит в том, что, хотя я обнаружил, как заставить общую доступную RAM вычислять используемый процент от, я не могу узнать, как считать 'теоретическую' максимальную скорость передачи данных диска. Мне нужно это для вычисления процента дисковой используемой скорости передачи. Любая справка значительно ценилась бы.

6
задан Brian Tompsett - 汤莱恩 19 December 2015 в 14:38
поделиться

3 ответа

Единственный способ сделать это - проверить это самостоятельно. Вы можете сделать что-то вроде этого в начале вашего приложения:

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 МБ - это не так много данных для записи, но вы можете попробовать это с большим объемом данных; концепция та же.

3
ответ дан 17 December 2019 в 04:41
поделиться

Попробуйте использовать WMI api, также может оказаться полезным LINQ to WMI .

1
ответ дан 17 December 2019 в 04:41
поделиться

Я не знаю никакого способа получить максимальную скорость передачи данных HD, но с WMI вы можете получить внутреннюю поверхность жесткого диска (USB, IDE ...). Вы можете использовать максимальную скорость передачи данных интерфейса и относиться к ней в процентах.

Также я собираюсь оставить здесь ссылку на небольшую статью о получении информации из HD с помощью WMI с исходным кодом. LINK

1
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: