2013-01-10 52 views
1

這裏是我的代碼讀取一個文本文件,這恰好是大於1GB,是管道分隔:Visual Studio 2012 Express對閱讀大文件有限制嗎?

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(); 
     } 
    } 
} 

當我按一下按鈕我得到這個錯誤:

"System.OutOfMemoryException' occurred in mscorlib.dll"

我有16GB的RAM ......我做錯了什麼?

+0

哪條線給你這個錯誤 –

+0

看到這個:http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in- clr-4-0 –

+0

[this](http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx)可能會有幫助.. –

回答

9

您的程序在32位模式下運行。它永遠不會允許讀取超過650兆字節的數據,即地址空間中可用的最大空洞。

Project + Properties,Build選項卡,取消選中「首選32位」選項。

請注意,在解析文件數據的幾乎任何應用程序中,使用這麼多的內存仍然是不必要的。只需使用StreamReader類一次讀取一行。

+1

「使用這麼多的內存仍然是不必要的」,哦,我不知道; p我寫了很多東西,使用所有的系統內存 –

+0

我沒有選擇「首選32位」選項。在運行程序時,我現在得到錯誤:「嘗試運行項目時出錯:無法啓動程序」(程序路徑'\ WindowsFormsApplication1.exe')。Windows Web Services框架中發生無法識別的錯誤。當我重新勾選「更喜歡32位「的程序運行沒問題(雖然之前我點擊按鈕) – phan

+0

聽起來很熟悉,我也不認識這個錯誤 –

1

沒有視覺工作室強加的限制。你可能有16G,但你不能把它全部用於你的程序。嘗試使用流或不同時讀取整個文件,而是逐行讀取...

0

當運行您的程序錯誤occures:「錯誤試圖運行項目:無法啓動程序在Windows Web服務框架發生無法識別的錯誤

解決的辦法是關閉您的防火牆防火牆BLOKS。 :?

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) 
相關問題