c#列表上的随机outofmemory异常

c#列表上的随机outofmemory异常,c#,exception,out-of-memory,C#,Exception,Out Of Memory,我有一个运行OCR Tesseract的应用程序。 当应用程序完成文件处理后,我在数据库中进行查询以检索一些数据并填写一个c#list(UAT中为3134040,生产中为400多万) 在制作过程中,有时我遇到了outofmemory异常。我真的不明白为什么它不经常发生。我打算日复一日地检索更多的数据。 一个月20次以上,我遇到异常4次(不是随后)。 当我处于调试模式时,我可以通过将此数量的数据提供给我的列表来重现异常:33554432 有人能帮我解释一下吗?单个对象的大小有2GB的限制。你可能

我有一个运行OCR Tesseract的应用程序。 当应用程序完成文件处理后,我在数据库中进行查询以检索一些数据并填写一个c#list(UAT中为3134040,生产中为400多万) 在制作过程中,有时我遇到了outofmemory异常。我真的不明白为什么它不经常发生。我打算日复一日地检索更多的数据。 一个月20次以上,我遇到异常4次(不是随后)。

当我处于调试模式时,我可以通过将此数量的数据提供给我的列表来重现异常:33554432


有人能帮我解释一下吗?

单个对象的大小有2GB的限制。你可能正在打那个。您还应该将代码粘贴到问题中,而不是屏幕截图。@juharr-除非这些是结构,否则400万项列表不可能超过2GB的限制。请尝试仅为64位而不是任何CPU构建。虽然这里的真正答案通常是以流式方式处理单个项目,而不是使用巨大的世界大小的块。@hoodaticus是真的,但如果它是一个“结构”,则很有可能,而且OP只表示超过400万,因此它可能更大,虽然我相信在64位的应用程序中,这个数字必须在2.6亿左右,而在32位的应用程序中,这个数字要翻一番。您是对的,如果它在32位模式下运行,那么总体限制是2GB,这很可能是问题的原因。谢谢您的回答。我明白有时候我会达到记忆极限。在我的dev env上,当我将数据固定到33554432时,我有outofmemory。。我最大的问题是为什么在生产中它是随机的?