Re: [問題] 處理資料庫時系統錯誤
※ 引述《sunflier (叮噹)》之銘言:
: ※ 引述《blue (A Joke From God)》之銘言:
: : 但在DataAdapter要fill dataset的時候,
: 因為dataset是屬於offline操作
: 在資料抓取時,會將所有資料先抓到你的memory裡面
: 所以你的記憶體才會爆增
: 你可以用DataReader,用online方式來去操作資料
: 就不會讓你的記憶體爆掉
: (取而代之的是,抓回來的資料是唯讀且為sequential operation
: 不能隨機存取某個row)
: 建議可看一下ADO.NET架構
請問sunflier大大,我如下這樣使用DataReader對嗎?
(connection與command如前文所述)
SqlConnection myConnection = new SqlConnection(connection);
SqlCommand myCommand = new SqlCommand(command, myConnection);
myConnection.Open();
SqlDataReader myReader;
myReader = myCommand.ExecuteReader();
接下來再用while(myReader.Read())將資料一筆筆讀出來計算
但是,問題還是發生了!
myReader = myCommand.ExecuteReader();
這裡一樣跳出了「系統錯誤」的訊息。
剛剛前文忘記仔細交代發生的情況
由於我一次是query 100個項目出來計算(約三萬筆資料)
不論我是用SqlDataAdapter或是SqlDataReader,
查詢第一個一百項目就會讓記憶體使用量到接近1GB,
往往前三四百個項目執行都OK,計算結果有輸出,
不過每一百個項目查詢計算之後,記憶體的使用量就會略往上加
我在每一百個項目查詢結果計算完之後,
前文中我有把myDA, myDS給dispose()掉,
上面使用的myReader跟connection也一樣close()掉
但計算總數不到五百個項目之後還是會出現錯誤訊息
另外,我也試了:一次只查詢一個項目(約三百筆資料),
記憶體使用量也一樣:第一個項目就會直線上升到1GB記憶體使用量,然後慢慢增加!
另外,實際上我如果在SQL Query Analyzer上面查詢一個項目的話,
select * from T1 where Name = 'A1'
記憶體使用量也試一樣的,請問會是我database設定上的問題嗎?
這個database當初是我從很多csv檔匯入資料來的,
裡頭只有一個table就是T1,也沒有設定索引!不知道是不是這原因?
再次謝謝各位大大的指導!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.37.137
推
09/12 21:40, , 1F
09/12 21:40, 1F
推
09/12 21:41, , 2F
09/12 21:41, 2F
推
09/13 08:22, , 3F
09/13 08:22, 3F
→
09/13 08:22, , 4F
09/13 08:22, 4F
推
09/13 09:10, , 5F
09/13 09:10, 5F
→
09/13 09:11, , 6F
09/13 09:11, 6F
→
09/13 09:11, , 7F
09/13 09:11, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章