2011-08-10 70 views
0

我在我的C#WinForm應用程序中使用SQL Server CE作爲數據庫,我的應用程序正在從各個網站收集代理,並且只插入一個SQL Server CE表中的一列。SQL Server CE使用太多的內存

代理表:

  1. ip地址

但似乎每一次插入,內存消耗是緩慢增加,應用程序的內存11000開始,通過它達到1,00,000計數的時間,內存使用量約爲87,000,查詢變得非常緩慢,這對我的應用程序不利,最初我以爲有內存泄漏,但找不到任何,這裏是我的代碼插入。

public void InsertData(DemoTable _table) 
{ 
    string strInsertQuery = string.Format("INSERT INTO DemoTable (Value) VALUES ({0})", _table.Value); 

    using (connection = new SqlCeConnection(connectionString)) 
    { 
     connection.Open(); 
     using (command = connection.CreateCommand()) 
     { 
      command.CommandText = strInsertQuery; 
      command.ExecuteNonQuery(); 
     } 
    } 
} 

這是正常的SQL Server CE或者我的應用程序出了問題,我也試圖強制垃圾回收但沒用。

我的應用程序將最多收集約100萬個代理,收穫過程非常快速,大約每秒500到1700個代理,我使用DataGridView虛擬模式分頁顯示它們,因此所有收集的代理對用戶可見,但使用分頁,但是我無法從SQL Server CE數據庫中獲得相同的性能,但它不能跟上其他進程。

請建議,我是否有SQL Server CE的替代方案,這對於這類工作是完美的,還是我能跟上快速收穫流程的任何方式?

+0

SQLce從未打算處理這種負載。你應該得到Sql Server。 – Amy

+0

您可以嘗試使用SqlCeResultSet和SqlCeUpdateableRecord以獲得更快的INSERT。如上所述,你應該考慮SQL Server和聰明的緩存這些類型的負載 – ErikEJ

回答

2

切換到SqlCeResultSet和SqlCeUpdatableRecord將明確幫助加快速度。我不確定它會對內存使用情況有所幫助。

此外,保持您的數據庫連接打開將有所幫助。 SQL CE不像SQL Server那樣處理連接池,並且爲每個查詢打開一個新連接都涉及相當大的開銷。這可能會解釋您報告的一些內存使用情況。

我也會認真考慮轉移到SQL Server Express或SQLite。任何一個人都可以更好地適應這項任務。