我有一個應用程序加載1500,000到網格。問題是需要大量的內存。 (1.8 GB)SqlDataAdapter內存使用情況
我觀察了下,
- 相同的查詢,如果我對SQL查詢 分析器運行需要60MB左右
- 在實際應用中,如果我只是執行 的ExecuteNonQuery()它也需要 某處大約60MB。
問題出在我執行它來獲取輸出爲DataTable時,我覺得在我這樣做的時候有一些問題。請幫忙。
這是我做的方式,加載了大量的數據時(即使我叫SP,它也執行我作爲一個參數傳遞的SQL)
using (var conn = new SqlConnection(connStr))
{
SqlCommand command = conn.CreateCommand();
//DbCommand command = conn.CreateCommand();
command.CommandTimeout = 30000;
conn.Open();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = spName;
SqlDataAdapter da = new SqlDataAdapter(command);
dt = new DataTable();
da.Fill(dt);
if (dt != null)
{
if (dt.Rows.Count == 0)
{
dt = null;
}
}
conn.Close();
}
嘗試RedGates的內存分析器,但沒有有用的線索。 –
你正在裝載什麼樣的數據?它是數字,字符串,日期時間還是所有的組合?如果您將數據庫中的1.5百萬條記錄加載到數據表中,可能會導致相當多的內存使用量。正如Boas所說,投入一些時間進行分頁將意味着您不必一次加載整個150萬行,並且會節省大量的內存。這隻意味着你更頻繁地訪問數據庫以獲得一組新結果。 –
穆斯,糾正它是數據類型的混合。我將所有記錄加載到DataTable,然後加載到DataGrid以顯示它們。當我們滾動時,如果應用程序可以加載它,則可以實現分頁。你知道一個可行的實施方式嗎? –