Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server CE性能,从表中选择7000条记录需要8秒_C#_Sql_Sql Server_Sql Server Ce - Fatal编程技术网

C# SQL Server CE性能,从表中选择7000条记录需要8秒

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();

我有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();

  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;
        }
    }
}