使用Web服务检索大数据时出现内存不足

时间:2011-01-20 13:03:04

标签: c# asp.net web-services

在使用Web服务检索大数据时,我面临Out of Memory Exception。它适用于少量数据。现在在生产中使用超过3到4 GB的大量数据,面临Out of Memory Exception。这里我们使用xml序列化和反序列化。

任何帮助将不胜感激。 alt text

2 个答案:

答案 0 :(得分:2)

我在处理XML时花了一些时间来研究内存不足的问题。以下是一些提示和建议:

1)32位机器上的最大进程大小可以是2GB,如果是特定的启动交换机,则为3GB。因此必须使用64位套件。

2)运行perfmon.exe以收集样本,并查看崩溃前进程占用的内存量。如果你在64位上运行,请确保它是为64位编译的,否则它将使用WOW和32位模式运行它。

3)在.NET 1.1中,如果使用XmlDocument处理,加载100MB XML将占用600-800MB的空间。在.NET 2.0及更高版本中,它是3-4次,但仍然相当可观。尽可能避免使用XmlDocument

4)我认为这可能是您的问题:避免重新创建序列化程序。 .NET实际上吐出代码并将它们编译成程序集,这些程序集无法按照您所知的方式卸载并导致内存泄漏,这是已知问题,也会发生在XSLT转换中。始终缓存序列化程序。

答案 1 :(得分:0)

我在评论中提到的问题是运行时无法分配足够大的连续内存块。

Eric Lippert在这个问题上写了一篇很棒的博客文章: http://blogs.msdn.com/b/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx