我在我的C#WinForm应用程序中使用SQL Server CE作为数据库,我的应用程序从各种网站收集代理,并插入到SQL Server CE表中,只有一列。
代理表:
但似乎每次插入,内存消耗都在缓慢增加,应用程序以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是正常的还是我的应用程序有问题,我也试图强制垃圾收集但没有用。
我的应用程序最多将收集大约1百万个代理,收获过程非常快,大约每秒500到1700个代理,我使用DataGridView
虚拟模式分页显示它们,因此用户可以看到所有收集的代理但是使用分页,但我无法从SQL Server CE数据库中获得相同的性能,它无法跟上其他进程。
请建议,我是否有SQL Server CE的替代方案,这种方式非常适合这类工作,或者我能跟上快速收获过程的任何方式?
答案 0 :(得分:2)
切换到SqlCeResultSet和SqlCeUpdatableRecord肯定会帮助加快速度。我不确定它会对内存的使用有所帮助。
此外,保持数据库连接打开将有所帮助。 SQL CE不像SQL Server那样处理连接池,并且为每个查询打开新连接会产生相当大的开销。这可能解释了您报告的一些内存使用情况。
我也会认真考虑转移到SQL Server Express或SQLite。任何一个都更适合这项任务。