1

这是我读取文本文件的代码,该文件恰好大于 1GB,并且是用竖线分隔的:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string strFilePath = @"C:\Users\Me\Desktop\123.txt";

        private void button1_Click(object sender, EventArgs e)
        {
            var arrRawData = File.ReadLines(strFilePath).Select(line => line.Split('|')).ToArray();
        }
    }
}

当我单击按钮时,我收到此错误:

“在 mscorlib.dll 中发生 System.OutOfMemoryException”

我有 16GB 的 RAM ......我做错了什么?

4

3 回答 3

9

您的程序在 32 位模式下运行。这将永远不允许读取超过大约 650 兆字节的数据,大约是地址空间中可用的最大大小的空洞。

项目 + 属性,构建选项卡,取消选中“首选 32 位”选项。

请注意,在几乎所有解析文件数据的应用程序中,仍然不需要使用这么多内存。只需使用 StreamReader 类一次读取一行。

于 2013-01-10T20:43:29.323 回答
1

视觉工作室没有限制。您可能有 16G,但您不能将其全部用于您的程序。尝试使用流或不同时读取整个文件,而是逐行读取...

于 2013-01-10T20:40:01.317 回答
0

运行程序时出现错误:“尝试运行项目时出错:无法启动程序。Windows Web 服务框架中出现无法识别的错误。

解决方案是关闭防火墙。防火墙块:

Event: Traffic
IP Address/User: 0000:0000:0000:0000:0000:0000:0000:0001
Description: Microsoft Visual Studio 2012 (devenv.exe)
Path: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe

Message: Blocked Outgoing TCP - Source 0000:0000:0000:0000:0000:0000:0000:0001 :  (12276)  Destination 0000:0000:0000:0000:0000:0000:0000:0001 :  (12275)
于 2013-12-30T09:35:23.133 回答