2013-11-28 217 views
0

我在使用數據讀取器上傳大型Excel文件(300mb +)時遇到問題。有了這段代碼,我打開了excel文件並分別加載每一行。使用斷點我注意到,這一個語句需要30s +。內存使用量也有穩步增長。 指定ExecuteReader()方法的CommandBehavior參數(例如SequentialAccess)不起作用。如何處理大型Excel文件?

我在這裏做錯了什麼?是否有其他處理大型(Excel)文件的方法?

const string inputFilePath = @"C:\largefile.xlsx"; 
const string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 12.0;IMEX=1;HDR=YES;\";Data Source=" + inputFilePath; 
using (var connection = new OleDbConnection(connectionString)) 
{ 
    connection.Open(); 
    var command = new OleDbCommand("largesheet$", connection) {CommandType = CommandType.TableDirect}; 
    var reader = command.ExecuteReader(); // <-- Completely loads file/sheet into memory 
    while (reader.HasRows) 
    { 
     reader.Read(); 
    } 
    connection.Close(); 
} 
+1

_ 「(300MB +)」 _ - 有你的問題。難道你不能在某種程序中導入Excel文件,這些程序是針對這種數據量的,比如數據庫? – CodeCaster

+0

所以唯一的辦法是分割文件並分別上傳它? – Freddy

+0

看看http://stackoverflow.com/a/17375381/2806497 – OlivierH

回答

0

可以嘗試在內存中的文件加載此:

Stream exportData = new MemoryStream(byte[] fileBuffer);