【问题标题】:SQL Server CE Using too much MemorySQL Server CE 使用过多内存
【发布时间】:2026-01-07 01:10:02
【问题描述】:

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

代理表:

  1. IP 地址

但似乎每次插入,内存消耗都在缓慢增加,应用程序以 11,000 内存开始,当计数达到 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 替代品,或者我可以跟上快速收获过程的任何方式?

【问题讨论】:

  • SQLce 从来没有打算处理这种负载。你应该得到 Sql Server。
  • 您可以尝试使用 SqlCeResultSet 和 SqlCeUpdateableRecord 来加快插入速度。如前所述,您应该考虑使用 SQL Server 和巧妙的缓存来处理这些类型的负载

标签: c# .net windows performance sql-server-ce


【解决方案1】:

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

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

我也会认真考虑迁移到 SQL Server Express 或 SQLite。任何一个都更适合这项任务。

【讨论】:

    最近更新 更多