Tag: performancecounter

为什么我需要管理员来阅读.NET CLR内存性能计数器

我无法以编程方式(在c#中)找到“.NET CLR Memory”计数器类别,就像在这个问题中一样。 以管理员身份运行解决了问题。 但为什么我需要这样做呢? 还有其他选择吗? 我想要只读访问,在我的应用程序中查看GC生成集合以进行性能分析。 最好不必使用管理员权限运行应用程序。 编辑: 我可以在性能监视器工具中看到内存性能计数器,而无需以管理员身份运行 如果不以Admin身份运行,我可以通过编程方式获得缩短(但不是空)的性能计数器类别列表,但这不包括我感兴趣的那个。 我们的公司设置有点疯狂:我有管理员权限,但我不是本地管理员组的成员。 我确实有权添加自己,但每30分钟左右一些自动化过程会删除我。 不知道这是否会影响任何事情 将自己添加到性能监视器用户组没有任何效果(除非我需要先重启)

性能计数器读取访问速度非常慢 – 任务管理器如何执行此操作?

我试图实现一个性能监视工具,我想监视内存和CPU等基本内容。 我试图通过使用性能计数器这样做,因为我相信这也是任务管理器在幕后使用的。 我不知道任务管理器是如何做到这一点的,但对我而言,使用此方法检索过程数据似乎需要花费很长时间: class Program { static void Main(string[] args) { while (true) { var pcs = Process.GetProcesses() .Select(p => new PerformanceCounter(“Process”, “Working Set – Private”, p.ProcessName)); var sw = Stopwatch.StartNew(); foreach (var pc in pcs) pc.NextValue(); Console.WriteLine($”Time taken to read {pcs.Count()} performance counters: {sw.ElapsedMilliseconds}ms”); Thread.Sleep(1000); } } } 有没有人有任何关于如何做到这一点或任务管理器或Process Explorer如何做到这一点的建议?

服务模型性能计数器实例名称

我试图直接连接到ServiceModel发出的性能计数器(用于服务,端点和操作)。 问题是,当我尝试与某个服务(或端点/操作)关联时,我需要指定计数器的实例名称。 根据MSDN ,实例名称的模式很简单,但是在某些情况下,当实例名称的一个组件(uri,合同名称等)太长时,它会缩短,并且在开头或者开头添加哈希代码字符串的结尾。文章没有说明它是如何散列的。 所以我的问题是有一种方法可以根据服务名称及其地址获取ServiceModel实例名称

cpu使用一个线程

如何在c#中获取.net中线程的cpu使用率

正确使用“%GC in GC”性能计数器

我试图以编程方式在“.NET CLR Memory”类别中获得“GC中的%time”性能计数器。 根据PerfMon的描述, GC中的%时间是自上一个GC循环以来执行垃圾收集(GC)所花费的时间百分比。 此计数器通常表示垃圾收集器代表应用程序收集和压缩内存所做的工作。 此计数器仅在每个GC结束时更新,计数器值反映最后观察到的值; 它不是一般的。 所以根据这个描述,我的理解是我必须定期获得性能计数器并自己计算平均值。 我获得性能计数器的方式是 string category = “.NET CLR Memory”; string counter = “% Time in GC”; string instance = Process.GetCurrentProcess().ProcessName; PerformanceCounter gcPerf; // make sure the performance counter is available to query if (PerformanceCounterCategory.Exists(category) && PerformanceCounterCategory.CounterExists(counter, category) && PerformanceCounterCategory.InstanceExists(instance, category)) { gcPerf = new PerformanceCounter(category, counter, instance); } […]

为什么我的表演台不会改变?

我必须在这里做错事。 我创建一个自定义性能计数器如下: string counterCategory = “Test Category”; string counterName = “Test Counter”; if (!PerformanceCounterCategory.Exists(counterCategory)) { Console.WriteLine(“Creating Counters”); CounterCreationDataCollection counterCreationDataCollection = new CounterCreationDataCollection(); counterCreationDataCollection.Add( new CounterCreationData(counterName, “Description”, PerformanceCounterType.NumberOfItems32) ); PerformanceCounterCategory.Create(counterCategory, “My category description/Help”, PerformanceCounterCategoryType.SingleInstance, counterCreationDataCollection); } 计数器类别和计数器在性能监视器中创建并可查看。 然后我尝试更改计数器的值 PerformanceCounter myCounter = new PerformanceCounter(counterCategory, counterName, false); for (int i = 0; i < 10; i++) { Console.WriteLine("Setting […]

使用C#以编程方式确定计算机的最大硬盘数据传输速率

我使用C#编写了一个小的WPF小部件,它将当前的CPU活动,使用的RAM和磁盘活动显示为三个小百分比类型的条形图。 我已经使用了以下PerformanceCounters 🙁 diskCounter PerformanceCounter返回当前的总磁盘活动,以每秒字节数为单位) 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); } 问题是虽然我已经发现如何获得总可用RAM来计算使用的百分比,但我无法找到如何读取磁盘的“理论”最大数据传输速率。 我需要这个来计算使用的磁盘传输速率的百分比。 任何帮助将不胜感激。

关于高分辨率性能计数器及其与.NET秒表相关的存在的说明?

在静态Stopwatch构造函数中,我们可以看到以下代码,它基本上检查是否存在高分辨率性能计数器。 static Stopwatch() { if (!SafeNativeMethods.QueryPerformanceFrequency(out Frequency)) { IsHighResolution = false; Frequency = 0x989680L; tickFrequency = 1.0; } else { IsHighResolution = true; tickFrequency = 10000000.0; tickFrequency /= (double) Frequency; } } 在MSDN上它说的是QueryPerformanceFrequency : 检索高分辨率性能计数器的频率(如果存在) 然而,目前还不清楚它究竟存在的时候? 我怀疑它通常存在于当前的机器上,但究竟不是吗? 这很有趣,因为当它不存在时, Stopwatch变成了DateTime.UtcNow属性的一个包装器。

性能计数器损坏?

性能指标是EVIL。 不要使用它们。 if(PerformanceCounterCategory.Exists(“ILoveYou”) ) // is true { PerformanceCounterCategory.Delete(“ILoveYou”); //throws exception The **configuration registry** key is invalid } at System.Diagnostics.PerformanceCounterLib.RegisterFiles(String arg0, Boolean unregister) at System.Diagnostics.PerformanceCounterLib.UnregisterCategory(String categoryName) at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) at WindowsFormsApplication1.Program.SetupCategory() 所有我发现的是: http : //blogs.msdn.com/b/oanapl/archive/2009/04/24/fix-corrupted-performance-counters.aspx (使用LODCTR / R) 它没有帮助。 因为我不知道他们在说什么文件。 any1还有其他想法吗? PS我用windows xp SP3可能这个问题? 我知道除非我取消页面文件,否则应该完全支持性能计数器。 这清楚我的问题是我无法卸载我的计数器。

从wmi获取每个进程的Cpu使用情况

我找到了许多来源来获取每个进程的CPU使用情况。 一般来说,有很多方法可以获得进程的CPU使用率。 来自win32_perfformatteddata_perfproc_process的percentprocessortime system.diagnostics中的performancecounter类 通过人工计算 进程类(通过process.getcurrentprocess()。totalprocessortime;)如此处所述。 FirstWay: 对于远程进程监视(我的方案是远程监视),percentprocessortime始终显示0到100+的值。 由于系统中有多个处理器,因此会发生这种情况。 它可以使用percentprocessortime / processorcount计算。 问题首先: 我可以在wmi explorer中读取percentprocessortime,它显示的所有值都是0或100,只是不是这个值。 这个值是对的吗? 或者它对监测价值有用吗? 第二种方式: 对于PerformanceCounter类监视,它只能在本地完成。 所以我不能用这个。 是否有可能将其用于远程? 第三种方式: (这里使用的公式最大的混乱。)这个计算是由一个PerformanceCounter类或wmi的win32_process类进行的。 有些人说通过使用以下方法计算性能计数器 考虑单CPU和 (处理器\%处理器时间)= 10% (处理器\%用户时间)= 8% (processor \%特权时间)= 2% (进程\%处理器时间\您的应用程序)= 80% 您的应用程序使用80%(处理器\%用户时间),即(8 * .8)= CPU的6.4%。 更多参考这里 。 通过使用以下公式从win32_process计算usermodetime和kernelmodetime DateTime firstSample, secondSample; firstSample = DateTime.Now; queryObj.Get(); //get cpu usage ulong u_oldCPU = (ulong)queryObj.Properties[“UserModeTime”].Value […]