2011-08-10 61 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。任何一个人都可以更好地适应这项任务。