gpt4 book ai didi

c# - 自定义计数器文件 View 内存不足

转载 作者:行者123 更新时间:2023-11-30 14:11:55 25 4
gpt4 key购买 nike

我有一个带有一个 Web 角色的 Azure 云项目。 Web 角色端点在部署后几乎立即返回 HTTP 400 - 错误请求。当我检查跟踪消息日志时,我看到以下异常 -

Type : System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Custom counters file view is out of memory.
Source : System
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : Int32 CalculateMemory(Int32, Int32, Int32 ByRef)
HResult : -2146233079
Stack Trace : at System.Diagnostics.SharedPerformanceCounter.CalculateMemory(Int32 oldOffset, Int32 totalSize, Int32& alignmentAdjustment)
at System.Diagnostics.SharedPerformanceCounter.CreateCategory(CategoryEntry* lastCategoryPointer, 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)

问题似乎是在 .NET 达到允许分配给性能计数器的内存量上限时引起的。

因此,我尝试使用 Web.config 中的以下条目来增加内存分配 -

<configuration> 
<system.diagnostics>
<performanceCounters filemappingsize="33554432" />
</system.diagnostics>
</configuration>

但即使如此,我仍然遇到问题。有人可以给我一些解决问题的建议吗?

谢谢!

最佳答案

您是否使用自己的性能计数器?我们的一个应用程序也有同样的异常,它创建了性能计数器,但没有正确处理它们。

请注意,调用 PerformanceCounter.Dispose() 是不够的 - 它只是继承自 Component.Dispose() 并且不添加任何其他功能。

因此,在处置多实例 PerformanceCounter 的实例时,请务必调用 PerformanceCounter.RemoveInstance(),否则您的 PerformanceCounter 实例将不断增长,直至保留内存(默认为 512 KB)已满。

示例模式如下所示(this.performanceCounters 是包含所用性能计数器的字典):

public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (this.performanceCounters != null)
{
foreach (PerformanceCounter counter in this.performanceCounters.Values)
{
counter.RemoveInstance();
counter.Dispose();
}

this.performanceCounters = null;
}
}
}

关于c# - 自定义计数器文件 View 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938801/

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