Détermination de la vitesse de transfert de données maximale du disque dur d'un ordinateur avec programme C #

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

Question

J'ai écrit un petit WPF widget à l'aide C # qui affiche l'activité du CPU, RAM utilisée et l'activité du disque que trois petites barres de type pourcentage. Je l'ai utilisé les PerformanceCounters suivantes pour cela: (diskCounter PerformanceCounter retourne l'activité du disque total actuel en octets par seconde)

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

Le problème est que même si je l'ai découvert comment obtenir la RAM totale disponible pour calculer un pourcentage utilisé à partir, je ne peux pas savoir comment lire le taux de transfert de données maximale « théorique » du disque. Je en ai besoin pour calculer le pourcentage du taux de transfert de disque utilisé. Toute aide serait grandement appréciée.

Était-ce utile?

La solution

La seule façon de le faire serait de tester vous-même. Vous pourriez faire quelque chose comme ça au début de votre demande:

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

Cela ne suppose cependant que le répertoire Temp est sur le disque en question. Sinon, vous devrez créer un chemin sur le disque que vous voulez mesurer. Notez que cette mesure est la vitesse d'écriture, pas la vitesse de lecture.

Ceci est un peu arrangea depuis 1Mo est pas beaucoup de données à écrire, mais vous pouvez l'essayer avec une plus grande quantité de données; le concept est le même.

Autres conseils

Essayez d'utiliser WMI api, aussi LINQ à WMI peut être utile.

Je ne sais pas moyen d'obtenir le taux de transfert de données maximum d'un HD, mais avec WMI, vous pouvez obtenir le intarface du disque dur (USB, IDE ...). Vous pouvez utiliser le taux de transfert de données maximum de l'interface et reffers votre pourcentage à lui.

En outre, je vais laisser un lien ici pour un petit article sur obtenir les informations FRM HD en utilisant WMI, avec le code source. LINK

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top