C# SQL Server CE使用太多内存

C# SQL Server CE使用太多内存,c#,.net,windows,performance,sql-server-ce,C#,.net,Windows,Performance,Sql Server Ce,在我的C#WinForm应用程序中,我使用SQL Server CE作为数据库,我的应用程序从各种网站获取代理,并插入到SQL Server CE表中,只有一列 代理表: IP地址 但似乎每次插入,内存消耗都在缓慢增加,应用程序开始时有11000个内存,当它达到100000个计数时,内存使用量约为87000,查询速度变得非常慢,这对我的应用程序来说是不好的,最初我认为内存有泄漏,但找不到,这是我的插入代码 public void InsertData(DemoTable _table) {

在我的C#WinForm应用程序中,我使用SQL Server CE作为数据库,我的应用程序从各种网站获取代理,并插入到SQL Server CE表中,只有一列

代理表:

  • IP地址
  • 但似乎每次插入,内存消耗都在缓慢增加,应用程序开始时有11000个内存,当它达到100000个计数时,内存使用量约为87000,查询速度变得非常慢,这对我的应用程序来说是不好的,最初我认为内存有泄漏,但找不到,这是我的插入代码

    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();
            }
        }
    }
    
    这对于SQLServerCE是正常的还是我的应用程序有问题,我也尝试强制垃圾收集,但没有用

    我的应用程序最多将收集大约100万个代理,收集过程非常快,大约每秒500到1700个代理,我使用
    DataGridView
    virtualmodepaging显示它们,因此用户可以看到所有收集的代理,但使用分页,但我无法从SQLServerCE数据库中获得相同的性能,它跟不上其他进程


    请建议,我是否有SQL Server CE的替代品,它非常适合这种类型的工作,或者我是否有任何方法可以跟上快速获取过程?

    切换到SqlCeResultSet和SQLCEUpdateRecord肯定会有助于加快速度。我不确定它对内存使用是否有帮助

    此外,保持数据库连接打开也会有所帮助。SQL CE不像SQL Server那样处理连接池,并且为每个查询打开新连接会带来相当大的开销。这可能解释了您报告的一些内存使用情况


    <>我也会认真考虑移动到SQLServer Express或SQLite。任何一个都更适合这个任务。

    SQLce从来没有打算处理这种负载。您应该获得Sql Server。您可以尝试使用SqlCeResultSet和SqlCeUpdateableRecord进行更快的插入。如上所述,您应该考虑SQLServer和智能缓存以用于这些类型的负载。