Определение максимальной скорости передачи данных на жестком диске компьютера программно с помощью C # - PullRequest
6 голосов
/ 30 июня 2010

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

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

Ответы [ 3 ]

2 голосов
/ 30 июня 2010

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

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

1 голос
/ 30 июня 2010

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

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

1 голос
/ 30 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...