我们如何在 C# 中获取磁盘性能信息

Posted

技术标签:

【中文标题】我们如何在 C# 中获取磁盘性能信息【英文标题】:How can we get Disk Performance info in C# 【发布时间】:2016-08-26 22:48:33 【问题描述】:

我想获得以下有关磁盘性能的信息。

我使用MSStorageDriver_FailurePredictThresholdsMSStorageDriver_ATAPISmartDataMSStorageDriver_FailurePredictStatus 类来获取相关信息,但没有得到正确的结果。

【问题讨论】:

首先,贴出你正在使用的代码。并更具体地说明“没有得到正确的结果” 另外,确切地您对什么信息感兴趣?您想要此处显示的所有数据(这可能会使问题过于宽泛),还是只显示其中的一部分? 我想要显示的所有数据位,但是如果我得到任何一位结果之后我可以获得更多位... 你可以看看here Thankx 但这些不是图像中显示的结果,我尝试了“Win32_DiskDrive”的所有字段但没有磁盘性能信息,它返回磁盘信息。 【参考方案1】:

这不是您想要的一切,但Win32_PerfFormattedData_PerfDisk_PhysicalDisk WMI 类为您提供了当前的读/写/传输速率和活动时间。它还给出了一些平均值,但我不确定它们是如何计算的(AvgDiskBytesPerWrite 为 0 似乎很奇怪)

// NOTE: Use ManagementObjectSearcher to find the path your interested in
var path = "Win32_PerfFormattedData_PerfDisk_PhysicalDisk.Name='0 C:'";
var wmiObj = new ManagementObject(path);
wmiObj.Properties.Cast<PropertyData>().ToDictionary(p => p.Name, p => p.Value).Dump();

/* OUTPUT */
AvgDiskBytesPerRead     63167 
AvgDiskBytesPerTransfer 63167 
AvgDiskBytesPerWrite    0 
AvgDiskQueueLength      0 
AvgDiskReadQueueLength  0 
AvgDisksecPerRead       0 
AvgDisksecPerTransfer   0 
AvgDisksecPerWrite      0 
AvgDiskWriteQueueLength 0 
Caption                 null 
CurrentDiskQueueLength  0 
Description             null 
DiskBytesPersec         20991616 
DiskReadBytesPersec     20991616 
DiskReadsPersec         332 
DiskTransfersPersec     332 
DiskWriteBytesPersec    0 
DiskWritesPersec        0 
Frequency_Object        null 
Frequency_PerfTime      null 
Frequency_Sys100NS      null 
Name                    0 C: 
PercentDiskReadTime     80 
PercentDiskTime         80 
PercentDiskWriteTime    0 
PercentIdleTime         32 
SplitIOPerSec           0 
Timestamp_Object        null 
Timestamp_PerfTime      null 
Timestamp_Sys100NS      null 

【讨论】:

【参考方案2】:

如果您正在寻找此内容,请查看此Link。输出示例如下:

 ###############################################################

 Current Directory Path: D:\WinDDK\32bit\drivespeed
 Total MB  230000, Free MB  103752, Used MB  126248

 Windows Storage Speed Test 32-Bit Version 1.2, Thu Mar 01 22:31:08 2012

                Copyright (C) Roy Longbottom 2011

     8 MB File         1          2          3          4          5
 Writing MB/sec      56.68     105.37      61.95      72.48      75.33
 Reading MB/sec      80.65     108.15      81.10      81.42      82.25

    16 MB File         1          2          3          4          5
 Writing MB/sec      81.53      94.61      81.41      88.06      71.39
 Reading MB/sec      88.25      72.75      93.53      93.51      92.70

    32 MB File         1          2          3          4          5
 Writing MB/sec      90.35      83.60      72.52      80.24      72.71
 Reading MB/sec      87.00      87.67      78.39      80.24      78.62

 ---------------------------------------------------------------------
 8 MB Cached File      1          2          3          4          5
 Writing MB/sec     703.27     628.08    1050.99    1617.29    1609.70
 Reading MB/sec    1930.60    2045.13    2054.49    2135.91    2390.08

 ---------------------------------------------------------------------
 Bus Speed Block KB     64        128        256        512       1024
 Reading MB/sec     174.36     189.07     221.83     247.82     261.21

 ---------------------------------------------------------------------
 1 KB Blocks File MB >    2      4      8     16     32     64    128
 Random Read  msecs    0.14   0.14   0.15   0.17   3.24   6.96   8.90
 Random Write msecs    0.53   0.66   1.03   1.38   1.74   1.83   2.42

 ---------------------------------------------------------------------
 500 Files   Write             Read             Delete
 File KB     MB/sec  ms/File   MB/sec  ms/File  Seconds
       2       0.32     6.44     0.95     2.17    0.123
       4       6.49     0.63    12.21     0.34    0.113
       8      11.54     0.71    15.17     0.54    0.121
      16      22.04     0.74    41.78     0.39    0.116
      32      32.92     1.00    26.31     1.25    0.074
      64      68.72     0.95    51.88     1.26    0.132

              End of test Thu Mar 01 22:32:11 2012

【讨论】:

我认为我们可以将这些值存储在文本文件中,因为它可以在 cmd 中执行。之后我们可以使用c#中的文件处理来获取这些信息。

以上是关于我们如何在 C# 中获取磁盘性能信息的主要内容,如果未能解决你的问题,请参考以下文章

在C#中如何获取系统中所安装的所有软件信息

如何使用PowerShell获取物理磁盘的信息

如何在 C# 中获取文件大小?

C#中怎么获取本地磁盘。我已经实现了把所有的驱动器都获取出来了^但是包括了光驱。

如何在 Linux 上获取磁盘信息?

在 C# 中获取当前 CPU、RAM 和磁盘驱动器的使用情况