当应用程序没有使用那么多内存时,如何获得System.OutOfMemoryException

时间:2014-09-23 21:49:57

标签: c# wpf exception-handling out-of-memory

我收到此错误,无法确定原因为何

我在32 GB RAM内存上使用Windows 8.1 64位

应用程序为32位,在任务管理器中仅使用约400 mb,在使用GC.GetTotalMemory(false)

进行检查时使用率更低

如何调试此错误原因?

C#wpf .net 4.5应用程序

此处数据库中最大的压缩字符串数据(322 KB):http://www.monstermmorpg.com/reciprocal/zipped.txt

此处未压缩的最大数据字符串(4837 KB):http://www.monstermmorpg.com/reciprocal/unzipped.txt

这里解压缩字符串函数

private static string Un_GZip_String(string compressedText)
{     
        using (var memoryStream = new MemoryStream())
        {
            byte[] gZipBuffer = Convert.FromBase64String(compressedText);
            int dataLength = BitConverter.ToInt32(gZipBuffer, 0);
            memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4);

            var buffer = new byte[dataLength];

            memoryStream.Position = 0;
            using (var gZipStream = new GZipStream(memoryStream, System.IO.Compression.CompressionMode.Decompress))
            {
                gZipStream.Read(buffer, 0, buffer.Length);
            }

            return Encoding.UTF8.GetString(buffer);
        }
}

http://i.stack.imgur.com/fepMs.png

enter image description here

1 个答案:

答案 0 :(得分:0)

我建议下载ANTS Performance Profiler:

http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/

它将确切地说明你为什么会得到内存不足的例外,并且有30天的免费试用 - 这应该是你有足够的时间来解决它。

正如有人在评论中所说,它可能是大型对象堆,因为它可能会很快失控。性能分析器会很快告诉您问题所在。