Determinazione velocità di trasferimento dati del disco rigido massimo di un computer di programmazione con C #

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

Domanda

ho scritto un piccolo WPF di widget utilizzando C # che visualizza la corrente di attività CPU, RAM utilizzata e l'attività del disco come tre piccoli di tipo percentuale bar. Sono usati i seguenti PerformanceCounters per questo: (diskCounter PerformanceCounter restituisce attività del disco corrente totale in byte per secondo)

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);
}

Il problema è che, anche se ho scoperto come ottenere la RAM totale disponibile per calcolare una percentuale utilizzata da, non riesco a trovare il modo di leggere la velocità di trasferimento del disco 'teorica' massima dei dati. Ho bisogno di questo per calcolare la percentuale di velocità di trasferimento su disco utilizzato. Qualsiasi aiuto sarebbe molto apprezzato.

È stato utile?

Soluzione

L'unico modo per farlo sarebbe quello di testare voi stessi. Si potrebbe fare qualcosa di simile, all'inizio della vostra applicazione:

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);

Questa, tuttavia, si supponga che la directory Temp è sul disco in questione. In caso contrario, si dovrà creare un percorso sul disco che si vuole misurare. Si noti che questo è la misurazione della velocità di scrittura, non ha letto la velocità.

Questo è un po 'artificiosa in quanto 1MB non è molto i dati da scrivere, ma si potrebbe provare con una maggiore quantità di dati; il concetto è lo stesso.

Altri suggerimenti

Prova ad utilizzare WMI api, anche LINQ to WMI può essere utile.

Non so alcun modo per ottenere la velocità di trasferimento dati massima di un HD, ma con WMI è possibile ottenere l'intarface del disco rigido (USB, IDE ...). È possibile utilizzare la velocità di trasferimento dati massima dell'interfaccia e Refer la percentuale ad esso.

Inoltre, ho intenzione di lasciare un link qui per un po 'di ottenere informazioni articolo su FRM l'HD utilizzando WMI, con il codice sorgente. LINK

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top