我在ASP.Net应用程序中获得了OOM异常,并且发现这可能是由于在抛出异常时发生了大量字符串操作,例如s1 = s1.Replace()
和s1 = s1.SubString()
。
如果它们按顺序发生,是否可以从这些操作中获取OOM异常?请求的数量并不多,但GC是否可能在堆上进行新的分配之前及时释放内存?
换句话说:以下代码是否可以提供OOM异常,或者在我们到达OOM异常之前GC是否会释放大量未引用的字符串?
string s = "hello world";
while (true)
{
s = s.Replace("h", "h");
}
答案 0 :(得分:0)
对于你的问题,这不是一个真正的答案,更多的是建议你想要调试困难的内存问题。
我发现Tess Ferrandez是一个非常宝贵的信息来源,可以解决那些难以预防的问题。她使用Windbg,它有着相当陡峭的学习曲线 - 但它可以让你弄清楚占用内存的原因和原因。
如果您有兴趣调试此问题,我建议您从labs开始,或者ASP.Net memory investigation帖子可能会让您选择正确的课程