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 クラスを使用して一度に 1 行ずつ読み取るだけです。

于 2013-01-10T20:43:29.323 に答える
1

VisualStudioによる制限はありません。あなたは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 に答える