交付機制並不重要 - 您可以在asp.net或桌面應用程序中執行此操作,而不消耗大量內存。
一般原則是您需要訪問數據爲流而不是一次加載到內存中。處理流式數據時,您只能在任何給定時間處理結果的子集。當您移動到流中的下一條記錄時,表示您正在用完成以前的記錄,因此.NET運行時可以回收用於處理它的內存。
在C#中,這意味着使用DataReader
(通常通過IDbCommand.ExecuteReader
獲得)。直接寫入使用數據讀取器的HttpResponse
流的典型片段可能是這樣的(儘管你可以數據綁定到他們以及):
using(IDataReader reader = dataAccessLayer.GetData()) {
if (! reader.IsClosed) {
// Send writes to the client immediately
// reader.Read advances the reader to the next record in the
// result set and discards the current record
while (reader.Read()) {
// Do something with the record - this just writes the first
// column to the response stream.
Response.Write(reader[0]);
// Send the content to the client immediately, even if the content
// is buffered. The only data in memory at any given time is the
// row you're working on.
Response.Flush();
}
}
}
如果Excel電子表格不是,jqGrid絕對是一個不錯的選擇。它可以輕鬆處理海量數據。但是,由於每列中的數據長度而導致在網格中包含html(如鏈接或圖像)時,它似乎有問題。我相信這是因爲它將數據存儲在dom中的數組中,以便稍後用於排序和過濾。如果有人知道這件事,我會很感激這些信息。 – 2010-08-23 15:04:10
性能問題將與檢索數據時緩存有關,因此,嵌入式控件可能會非常糟糕地觸及此控件,但值得對此進行測試。請參閱我的回答中有關Excel建議的評論。 – 2010-08-23 15:06:19