gpt4 book ai didi

c# - 性能计数器 NextValue 返回相同的先前值

转载 作者:行者123 更新时间:2023-11-30 21:09:39 26 4
gpt4 key购买 nike

File.Delete("D:\\filler.tmp"); // now %free space is 41
var freeSpaceCounter=new PerformanceCounter("LogicalDisk", "% Free Space", "D:");
freeSpaceCounter.NextSample();
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
freeSpaceCounter.Dispose();
freeSpaceCounter.Close();
Thread.Sleep(1000);
Process p = Process.Start("fsutil", "file createnew d:\\filler.tmp 16000000000");
p.WaitForExit(); // now % free space is 1
Thread.Sleep(1000);
freeSpaceCounter = new PerformanceCounter("LogicalDisk", "% Free Space", "D:");
freeSpaceCounter.NextSample();
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
Thread.Sleep(1000);
freeSpaceCounter.NextSample();
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41
Console.WriteLine(freeSpaceCounter.NextValue()); // returns 41

为什么当实际值下降到 1 时,它一直返回 41?如何多次获取当前值?

最佳答案

编辑 - 性能计数器详细信息

您需要等待超过 1000 毫秒才能使用 PerformanceCounter 查看可用磁盘空间的变化。 PerformanceCounter("LogicalDisk", "% Free Space") 计数器的刷新率似乎是 300 秒。在这五分钟的时间间隔内重复调用 .NextValue() 将产生与您所看到的相同的结果。这个比率仅基于我做过的一些测试,所以我不能说这个值在各种平台上的一致性。

如果您需要更短的采样周期,我只能建议您在获取 NextValue 读数后关闭应用程序。重新打开应用程序时,您会看到新的 PerformanceCounter 实例获取了最新的磁盘空间测量值。我不相信 CloseDispose 甚至包装在 using 中,然后创建一个新实例具有相同的效果。我没有深入研究这个问题的细节,因为我可以选择使用以下选项。

驾驶信息

或者,如果您未绑定(bind)到性能计数器并且正在监视本地驱动器,则可以使用:

System.IO.DriveInfo driveInfo = new DriveInfo("D:");

driveInfo.TotalFreeSpaceDriveInfo 类的其他属性。

编辑 - WMI

如果您还需要检查远程机器,您可以使用 WMI。也许以下内容对您有用。

System.Management.ManagementScope scope = 
new System.Management.ManagementScope(@"\\remoteMachine\root\cimv2");

ObjectQuery query =
new ObjectQuery("SELECT Name, Freespace FROM Win32_LogicalDisk WHERE DriveType=3");

ManagementObjectSearcher search = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection results = search.Get();

foreach (ManagementObject mo in results)
{
Console.WriteLine("Drive: {0} -- Free Space: {1}", mo["Name"], mo["FreeSpace"]);
}

关于c# - 性能计数器 NextValue 返回相同的先前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8936502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com