如何通过C#代码获取Kentico的内存统计信息?

How to get Kentico's memory statistics via C# code?

背景

我最近遇到了一个内存不足的异常,当用户访问我的 Kentico 网站的几个页面时。快进 - 我发现分配的内存(系统 > 常规)超过 2 GB!然后我转到“调试”>“清除缓存”,然后注意到分配的内存大约在 400 MB 左右(呸……)。现在,当用户访问该页面时,它可以正常工作而不会出现任何内存不足异常。

问题

有没有办法通过代码(最好是 C#)获取这些内存统计信息?我正在考虑能够定期监视这些内存统计信息并在分配的内存过高时触发警报(从我的 C# 代码向 webhook 发送 email/post)。

补充信息

谢谢!

Kentico API 中似乎没有任何东西可以访问内存统计信息,但也许这个 answer 会对您有所帮助。

您可以使用 SystemHelper class to get statistics and memory data. It still mostly relies on .NET Process and its properties. If you are on azure, you can use above along with PerformanceCounters to log your own sets of information into application insights 并根据这些计数器创建您自己的警报。

如果您查看“系统”页面上的代码,就会找到答案。转到 /CMSModules/System/Controls/System.ascx.cs 文件并搜索 Memory.Text。您会发现几种 SystemHelper 方法来为您获取值。

SystemHelper.GetVirtualMemorySize()
SystemHelper.GetWorkingSetSize()
SystemHelper.GetPeakWorkingSetSize()

Kentico 建议每 24 小时重启一次应用。我建议你安排在晚上的某个时间一个接一个地重启你的实例。