【问题标题】:Fastest Get data from remote server最快从远程服务器获取数据
【发布时间】:2012-11-06 14:20:43
【问题描述】:

我正在创建一个 Windows 应用程序,我需要在其中使用 ado.net/(或使用 C# 的任何其他方式,如果有的话)获取数据。从一张桌子。数据库表显然有大约100000 记录,下载需要很长时间。

有没有更快的方法可以让我更快地获取数据?

我尝试了DataReader,但仍然不够快。

【问题讨论】:

  • 什么是下载?显示你尝试过的,100000 并不多。
  • 如果您的数据库查询需要很长时间,那么您可以随时考虑在表上设置索引。
  • 如果底层连接和/或数据库很慢,那么您使用什么类/方法并不重要。
  • 尝试 SqlDataReader 的选项,如 SequentialDataAccess。
  • 不使用阅读器?您是否尝试过使用 SQLDataAdapter 并填充 DataTable 或 DataSet?在某些时候,您需要实际改进您的 SQL(T 或 PL),并可能查看存储过程以改进您在服务器端所做的事情,这可能会或可能不会提高您通过网络获取数据的性能。我用 SQL 重新提出了你的问题。

标签: c# .net sql performance ado.net


【解决方案1】:

数据读取器 API 是您能做的最直接的 API。重要的是时间在哪里?

  • 传输数据时是否需要带宽?
  • 还是在基本查询中?

您可以通过在机器上本地运行查询来找出答案,并查看需要多长时间。如果带宽是您的限制,那么您真正可以尝试的只是删除您实际上不需要的列(不要这样做select *)。或者为您和服务器之间的更粗的管道付费。在某些情况中,在本地查询数据并以某种压缩形式返回数据可能会有所帮助 - 但您实际上是在谈论诸如网络服务之类的东西,它还有其他带宽考虑因素。

不过,问题更可能出在查询本身。通常是这样的:

  • 编写合理的 tsql
  • 添加适当的索引
  • 避免使用游标、复杂的处理等

【讨论】:

    【解决方案2】:

    您可能想要实现一个需要知道的基础方法。只拉取需要的第一块数据,然后在需要下一组数据时拉取这些行。

    【讨论】:

      【解决方案3】:

      可能是您的查询太慢了,而不是流式处理。您应该向我们展示您的 sql 查询,然后我们可以帮助您改进它。

      假设您想从表中获取所有 100000 条记录,您可以使用 SqlDataAdapter 填充 DataTableSqlDataReader 填充 List<YourCustomClass>

      DataTable 方法(因为我不知道你的领域,所以很难展示一个类):

      var table = new DataTable();
      const string sql = "SELECT * FROM dbo.YourTable ORDER BY SomeColumn";
      using(var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
      using(var da  = new SqlDataAdapter(sql, con))
      {
          da.Fill(table);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 2014-09-13
        • 1970-01-01
        • 2017-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多