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

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

Вопрос

Я написал маленький виджет WPF, используя C #, который отображает текущую активность CPU, используемую баран и дисковую активность как три небольших процентных типа. Для этого я использовал следующие исполнители: (DiskCounter Performancounter возвращает текущую общую активность диска в байтах в секунду)

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