Visual Studio 'system.outofmemoryexception' 类型异常
Visual Studio exception of type 'system.outofmemoryexception'
我正在尝试从 csv 文件中加载 250 万行数据作为字符串。这是 visual studio 的 x64(非 32 位)(调试 = 任何 CPU,发布 = 任何 CPU。Windows 也是 64 位。)
我已经预加载了正在填充的空数据库:
public static string[,] allNames = new string[2500000, 12];
然后我继续填写它。我以前只有 200 万行,而且工作正常。然后我添加更多行,并得到内存错误。
查看任务管理器,我可以清楚地看到我的 16gb 我还有 4gb 可用,但我还是去买了 16gb 的内存,因为我无法弄清楚可能是什么问题。
瞧瞧,错误仍然出现。
我尝试将数据拆分为两个不同的数据帧,但它仍然在同一位置给出错误。删除一两列,使其走得更远,或者如果它是具有较长字符串的列之一(最长的字符串几乎有 1000 个字符长),则直到最后。
这是 Visual Studio 2019 年。任何帮助都会很棒!
解决方案 1:
您可以将您的 csv 文件拆分为 3 个文件,每个文件最多包含 100 万条记录,然后您可以一个一个地上传它。
如果问题仍然存在,则每个文件保留 50 万条记录。
您的问题将暂时得到解决。
你可以在这里看到字符串的最大长度。 What is the maximum possible length of a .NET string?
解决方案 2:
您可以使用 StringBuilder 对象代替字符串对象。
有一个项目设置显示“首选 32 位”。确保它没有被选中。
您真的应该考虑重构您的应用程序,这样您就不会一次将所有数据读入内存。我们这里的 None 可以帮助您解决这个问题,除非您提供更多信息
我正在尝试从 csv 文件中加载 250 万行数据作为字符串。这是 visual studio 的 x64(非 32 位)(调试 = 任何 CPU,发布 = 任何 CPU。Windows 也是 64 位。)
我已经预加载了正在填充的空数据库:
public static string[,] allNames = new string[2500000, 12];
然后我继续填写它。我以前只有 200 万行,而且工作正常。然后我添加更多行,并得到内存错误。
查看任务管理器,我可以清楚地看到我的 16gb 我还有 4gb 可用,但我还是去买了 16gb 的内存,因为我无法弄清楚可能是什么问题。
瞧瞧,错误仍然出现。 我尝试将数据拆分为两个不同的数据帧,但它仍然在同一位置给出错误。删除一两列,使其走得更远,或者如果它是具有较长字符串的列之一(最长的字符串几乎有 1000 个字符长),则直到最后。
这是 Visual Studio 2019 年。任何帮助都会很棒!
解决方案 1:
您可以将您的 csv 文件拆分为 3 个文件,每个文件最多包含 100 万条记录,然后您可以一个一个地上传它。
如果问题仍然存在,则每个文件保留 50 万条记录。
您的问题将暂时得到解决。
你可以在这里看到字符串的最大长度。 What is the maximum possible length of a .NET string?
解决方案 2:
您可以使用 StringBuilder 对象代替字符串对象。
有一个项目设置显示“首选 32 位”。确保它没有被选中。
您真的应该考虑重构您的应用程序,这样您就不会一次将所有数据读入内存。我们这里的 None 可以帮助您解决这个问题,除非您提供更多信息