C# SQL Server CE性能,从表中选择7000条记录需要8秒
我有SQL Server CE 3.5数据库。我运行以下代码:C# SQL Server CE性能,从表中选择7000条记录需要8秒,c#,sql,sql-server,sql-server-ce,C#,Sql,Sql Server,Sql Server Ce,我有SQL Server CE 3.5数据库。我运行以下代码: private void Load(string sql) { if (connection.State != ConnectionState.Open) connection.Open(); SqlCeDataAdapter sqlCeDataAdapter = new SqlCeDataAdapter(sql, connection); Stopwatch watch = new Stopwatch();
private void Load(string sql)
{
if (connection.State != ConnectionState.Open)
connection.Open();
SqlCeDataAdapter sqlCeDataAdapter = new SqlCeDataAdapter(sql, connection);
Stopwatch watch = new Stopwatch();
DataSet dataSet = new DataSet();
try
{
Cursor.Current = Cursors.WaitCursor;
watch.Start();
sqlCeDataAdapter.Fill(dataSet, "items");
sqlCeDataAdapter.Dispose();
var myBind = new BindingSource(dataSet, "items");
grid.DataSource = myBind;
}
finally
{
watch.Stop();
Cursor.Current = Cursors.Default;
MessageBox.Show(watch.ElapsedMilliseconds.ToString());
}
}
Load ("select a1, a2 from table");
SQL Server CE是否很长,还是应该更快地加载
我可以做些什么来加快选择速度
当我与其他表使用联接时,时间会急剧增长
编辑:
我已经更改了以下新版本的代码,但仍然是7.5s
private void Load2 (string sql)
{
if (connection.State != System.Data.ConnectionState.Open)
{
connection.Open();
}
using (SqlCeCommand command = new SqlCeCommand(sql, connection))
{
Stopwatch watch = new Stopwatch();
Cursor.Current = Cursors.WaitCursor;
watch.Start();
using (SqlCeDataReader reader = command.ExecuteReader())
{
DataSet dataSet = new DataSet();
dataSet.Tables.Add("items");
dataSet.Tables["items"].Columns.Add("s1");
dataSet.Tables["items"].Columns.Add("s2");
while (reader.Read())
{
string s1 = reader.GetString(0);
string s2 = reader.GetString(1);
dataSet.Tables["items"].Rows.Add(s1, s2);
}
watch.Stop();
Cursor.Current = Cursors.Default;
MessageBox.Show(watch.ElapsedMilliseconds.ToString());
BindingSource binding = new BindingSource(dataSet, "items");
grid.DataSource = binding;
}
}
}
SqlCeDataAdapter.Fill(…)
就是出了名的慢。如果您真的需要性能,那么您需要使用一个
当然,添加正确的错误处理,并根据您的喜好进行清理。与DbDataAdapter实现相比,还有一个在性能上相当不错的方法
因为您使用的是SqlCe,所以您还有其他限制因素,如磁盘IO,并且您没有一台服务器可以通过任何优化来处理SQL事务。事实是:从表中选择a.column1、a.column2a@your编辑时,您还必须了解,自使用SQL CE以来,您还有其他限制因素,如磁盘IO,而且您没有一台服务器处理SQL事务,没有任何类型的优化或负载平衡。谢谢您的回答。我已经更改了你版本的代码,但我仍然有7.5秒。。。我已经编辑了我的帖子,你可以看到我是如何修改的。可能是你的磁盘IO限制了你。在我的机器上,我能在大约2秒钟内处理7000条记录。使用SqlCeDataReader与在.NET中一样低级。
private void Load(string sql) {
if (connection.State != System.Data.ConnectionState.Open) {
connection.Open();
}
using (SqlCeCommand command = new SqlCeCommand(sql, connection)) {
using (SqlCeDataReader reader = command.ExecuteReader()) {
DataSet dataSet = new DataSet();
dataSet.Tables.Add("items");
while (reader.Read()) {
DataRow row = dataSet.Tables["items"].NewRow();
// fill your row
dataSet.Tables["items"].Rows.Add(row);
}
BindingSource binding = new BindingSource(dataSet, "items");
grid.DataSource = binding;
}
}
}