PerformanceCounter -自定义计数器文件视图内存不足

本文关键字:视图 内存不足 文件 计数器 自定义 PerformanceCounter | 更新日期: 2023-09-27 18:18:53

在我们的。net Win32应用程序上做一些负载测试时,我遇到了一些异常:

System.TypeInitializationException: The type initializer for 'MyClass' threw an exception. ---> System.InvalidOperationException: Custom counters file view is out of memory.
   at System.Diagnostics.SharedPerformanceCounter.CalculateMemory(Int32 oldOffset, Int32 totalSize, Int32& alignmentAdjustment)
   at System.Diagnostics.SharedPerformanceCounter.CreateInstance(CategoryEntry* categoryPointer, Int32 instanceNameHashCode, String instanceName, PerformanceCounterInstanceLifetime lifetime)
   at System.Diagnostics.SharedPerformanceCounter.GetCounter(String counterName, String instanceName, Boolean enableReuse, PerformanceCounterInstanceLifetime lifetime)
   at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime)
   at System.Diagnostics.PerformanceCounter.InitializeImpl()
   at System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly)

在运行这一行时发生:

new PerformanceCounter("CategoryName", "CounterName", "InstanceName", false);

我不是很熟悉性能计数器,通过看到这个消息,我知道它们存储在一些文件中,但是这是开发人员清除这个文件的责任吗?如果是,怎么做?如果没有,我该怎么办?

我在同一台机器上运行了5个这个应用程序的实例

PerformanceCounter -自定义计数器文件视图内存不足

性能计数器实现IDisposable,所以你可以使用

直接

:

 perfCounter.Close();
 perfCounter.Dispose();
间接

:

using(PerformanceCounter perfCounter=new PerformanceCounter())
{
   //Your Code.
}

清空资源。

还可以使用注册表为性能计数器分配更多内存。请参阅文档中的这篇文章:https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter(v=vs.110).aspx

. net Framework 2.0中安装的性能计数器类别使用单独的共享内存,每个性能计数器类别都有自己的内存。您可以通过在注册表项HKEY_LOCAL_MACHINE'SYSTEM'CurrentControlSet'Services' Performance中创建一个名为FileMappingSize的DWORD来指定单独共享内存的大小。FileMappingSize值设置为类别的共享内存大小。默认大小为131072十进制。如果FileMappingSize值不存在,则在Machine中指定的performanceCounters元素的FileMappingSize属性值。使用配置文件,会导致配置文件处理的额外开销。通过在注册表中设置文件映射大小,可以提高应用程序启动的性能。有关文件映射大小的详细信息,请参见Element.