如果您打开Windows 8.1任务管理器,选择“更多详细信息”,“性能”选项卡和“磁盘0”项,您将看到“平均响应时间”值,以毫秒为单位。
如何使用PerformanceCounter
类来获取此值?
以下是我使用的计数器:
static PerformanceCounterCategory PhysicalDiskCategory = new PerformanceCounterCategory("PhysicalDisk");
static List<string> PhysicalDisks = new List<string>(PhysicalDiskCategory.GetInstanceNames());
static string Disk0Instance = PhysicalDisks.FirstOrDefault(i => i.StartsWith("0"));
static PerformanceCounter DiskTimeCounter = new PerformanceCounter("PhysicalDisk", "% Disk Time", Disk0Instance);
static PerformanceCounter DiskTransferCounter = new PerformanceCounter("PhysicalDisk", "Disk Bytes/sec", Disk0Instance);
static PerformanceCounter DiskAvgSecTransferCounter = new PerformanceCounter("PhysicalDisk", "Avg. Disk sec/Transfer", Disk0Instance);
static PerformanceCounter DiskAvgQueueLengthCounter = new PerformanceCounter("PhysicalDisk", "Avg. Disk Queue Length", Disk0Instance);
它们都没有给我价值,但“平均磁盘队列长度”似乎与“平均响应时间”密切相关。这似乎合理 - 磁盘延迟越多 - 磁盘队列越长。但任务经理如何得到它?它是从多个计数器计算的吗?
BTW,如何区分低影响后台磁盘操作(运行Windows Defender全扫描以观察此情况)与高影响力(Windows启动期间)之间的区别?
在你到达Windows桌面后不久,计算机就没有响应了,几乎没用,几分钟(如果你有快速SSD则为几秒钟)。这与磁盘时间有关。当你等到磁盘时间降到50%以下时 - 系统完全响应。
但是,如果磁盘时间超过90%是由Windows Defender或其他后台任务引起的,则情况并非如此。它不会影响系统响应能力。 Hibernate和恢复系统。你会发现磁盘时间超过90%至少一分钟(我的最多5分钟)。但是系统响应性没有问题。 Visual Studio几乎立即启动。打开大项目没有滞后。
我发现重启后不久“平均响应时间”与AV扫描时测量的值相比是巨大的。这可能正是它 - 一种衡量REAL系统响应能力的方法。但他们怎么得到它?如何在.NET应用程序中获取它?