out of memory 問題 原來是 SQLite 的搞的鬼,用 SQLite 一定要用 using 包起來

今天碰到一個奇怪問題 還是記一下:
我需要開2500個 DB檔案 讀取資料
用 windows 程式
一般都是直接用 foreach
所以是
new myOpenDB
 foreach (string item in fileList )
 {   開檔 讀取 處理    }
但是到 1000多時 就報偵錯錯誤...

後來為了知道是卡在哪個檔
改用 Thread 來跑 為了將 name show出來
//建立Thread
new Thread(() =>
{
 foreach (string item in fileList )
 {   開檔 讀取 處理
     label1.Text = item;
 }
}).Start();

神奇的事 ....沒有報錯了 順利跑完...
記一下 下次有大量資料處理 開個 thread 去跑比較安全
****************************************************
最後寫MVC時發現
 SQLite 會不停累積 就會 發生  out of memory
close不掉 還是掛 
vs2017 可以看執行佔用 RAM
一跑起來就從 170M 直線上升 800M..900M....掛
每次 new 再重開  Close 再重開 都沒用....
查google 原來要加 useing

using 陳述式 (C# 參考)


本來是
 var command = new SQLiteCommand(Lcon)
  command.CommandText = @"select * from Tel_all where Rec_NO=" + RecNo;
  SQLiteDataReader Dread = command.ExecuteReader();
  if (Dread.Read())  Tel = Dread["tel"].ToString().Trim();
  Dread.Close();
  記憶體飆升

 using (var command = new SQLiteCommand(Lcon))
 {
    command.CommandText = @"select * from Tel_all where Rec_NO=" + RecNo;
    SQLiteDataReader Dread = command.ExecuteReader();
  if (Dread.Read())  Tel = Dread["tel"].ToString().Trim();
  Dread.Close();
}
記憶體就頂多就到 190M
沒做大量測試 真不知道 怎麼死的










留言

熱門文章