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个这个应用程序的实例
性能计数器实现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.