c# - 为什么 ReadAllLines 在 WPF 中有效但在 ConsoleApp 中无效

标签 c# csv file.readalllines

我正在对读取 CSV 文件的不同方式进行一些基准测试,发现了一个“奇怪”的问题。问题是当我在控制台应用程序中使用此方法时:

        var lines = File.ReadAllLines(fileName); // OutOfMemoryException
        foreach (var line in lines)
        {
            //doing stuff
        }

我得到一个 OutOfMemoryException,但是当我在我的 WPF 项目中使用相同的方法时它工作正常。 我测试它的文件是 730MB,我知道不能在更大的 CSV 文件上使用 ReadAllLines,但为什么这个方法在 WPF 应用程序中有效,但在控制台应用程序中无效?

最佳答案

您正在使用 32 位进程并遭受地址空间碎片的困扰。这意味着运行时无法分配足够的连续内存,尽管总共有足够的内存可用。 WPF 可能只是倾向于具有更好的内存布局。

将项目更改为 64 位。

或者,使用 File.ReadLines 流式传输文件.

关于c# - 为什么 ReadAllLines 在 WPF 中有效但在 ConsoleApp 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25930413/

相关文章:

c# - 设备 Wavecom 调制解调器不支持 SmsSubmitPdu GSMComm 命令

c# - 使用包含字符串的参数进行断言

c# - MVC 5 还需要 System.Web.Helpers 吗?

c# - ReaderWriterLockSlim 扩展方法性能

csv - oozie-在配置单元操作中使用存档文件

c# - 我如何将 ReadAllLines 与 gzip 文件一起使用

c# - 在 C# 中解析带有颜色的日志(文本文件)

c# - 使用 StartsWith() 获取读取文本文件的第二个实例

excel - 我可以使用 VBScript 来获取现有的 CSV 并将它们制作成单个 Excel 工作簿的选项卡吗?

jquery - 使用 jQuery 和 HTML 导出为 CSV