为什么ReadAllLines在WPF中工作,但在ConsoleApp中不工作

Sim*_*mon 2 c# csv file.readalllines

我正在做一些基准测试,以不同的方式来读取CSV文件,并发现一个"奇怪"的问题.问题是当我在控制台应用程序中使用此方法时:

        var lines = File.ReadAllLines(fileName); // OutOfMemoryException
        foreach (var line in lines)
        {
            //doing stuff
        }
Run Code Online (Sandbox Code Playgroud)

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

usr*_*usr 5

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

将项目更改为64位.

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