我正在开发一个 c# 服务应用程序,我遇到了这个问题,不知从何而来,也没有明显的原因,进程的内存将在大约 5 秒内从 150mb 增加到近 2gb,然后又回到 150mb。但是我们系统中的任何东西都不应该使用接近那个内存量的任何地方(所以它可能是某个地方的错误)。它可能在某处是一个紧密的 while true 循环,但当时的 cpu 使用率非常低,所以我想我会寻找其他想法。
现在更奇怪的是,当我为 64 位编译服务时,除了超过 10gb 的 ram(对其中的大部分进行分页)之外,还会发生同样的大规模爆发,这只会导致计算机及其上运行的所有内容出现很多问题。过了一会儿它关闭了,但看起来 Windows 仍然愿意给它更多的内存。
您有什么想法或工具可以帮助我找到它吗? 是的,它有很多日志记录,但是日志中没有任何内容可以说明为什么会发生这种情况。
我可以在控制台应用程序模式下运行该服务,所以我的下一个测试将在 visual studio 调试器中运行它,看看我是否能找到任何东西。
它只是偶尔发生,但通常在启动后 10-20 分钟左右。 在 32 位模式下,它会像往常一样清理并继续。 64 位模式它会在一段时间后崩溃并使用愚蠢的内存量。 但是我真的很困惑为什么会这样!!!
编辑:请查看对 windbg 帖子的表扬
最佳答案
你可以尝试一个分析器,比如 CLRProfiler, a free download from MS (它太酷了)。它可以分析服务。运行它直到看到内存峰值,然后停止它并查看堆转储。
关于c# - c# 服务中的巨大内存爆裂,可能是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717796/