我有一个Windows服务,最终会抛出“Out of Memory”异常。它是用C#编写的,在Windows 7上运行。
是,我已经在Stack Overflow以及互联网上的其他地方阅读了有关此内容的现有问题。事实上,我发现Eric Lippert写的一篇很棒的文章叫做“Out of Memory”并不是指物理记忆,在那里他提供了对这种情况的非常明确的解释。
在这篇文章中,他引用了“内存不足”的声明:“这些日子是用词不当。它应该是一个”无法找到足够的连续地址空间“的错误;有足够的内存因为内存等于磁盘空间“。
他还说:
“内存不足”错误几乎从未发生过,因为没有足够的可用存储空间;正如我们所见,存储是磁盘空间,而磁盘现在是巨大的。相反,发生“内存不足”错误是因为进程无法在其虚拟地址空间中找到足够大的连续未使用页面部分来执行请求的映射。
当我查看PerfMon中的服务时,我看到Memory for Commit,Working Set和Private下的列都在不断增长。我确定有一些字符串不断被添加到某个列表中,或者某些列表未被清除。
我的问题是,C#中是否有一些技术可以用来监视代码本身内部对象或集合的内存请求,例如可以监视系统的类库?如果是这样,我可以密切关注代码本身内的连续内存请求。