【问题标题】:C# SQL query is laggingC# SQL 查询滞后
【发布时间】:2016-05-23 08:40:24
【问题描述】:

我开发了一个应用程序来处理数据库中的数据。当我从我的 PC 或我附近的 PC(在我的公司,同一台服务器)上运行该应用程序时,它工作正常,但是当来自同一公司但另一台服务器(另一个国家/地区)的人试图做同样的事情时,他有巨大的 LAG .

我知道查询有点“太多”:

SqlCommand command = new SqlCommand("SELECT * FROM dbo.Person", con)

更多数据 -> 更多滞后

但我有点需要数据库中的所有数据来填充 ListView,然后导出到 Excel 文档。

我尝试过的事情:

我创建了一个将执行此命令的后台工作人员,当工作人员完成时,我使用如下数据填充 ListView:

private void ViewAllWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)    
{   
    while (Oreader.Read())
    {

        ListViewItem item = new ListViewItem(Oreader["ID"].ToString());

        item.SubItems.Add(Oreader["DecadeOfBirth"].ToString());
        // etc
    }
}

在这种情况下你会怎么做?什么可以帮助减少延迟?什么是正确的方法?

【问题讨论】:

  • 填充 ListView 与导出到 Excel 之间有很大的不同。什么是真正的?
  • 在获取记录时尝试在 do while 循环中从 PersonTable 获取前 (1000) 个项目,否则您的连接将超时
  • 真的需要表中的每条记录,还是在做一些下游逻辑来减少输出?
  • 测试一下查询的执行速度如何?
  • 或者在服务器端创建一个服务,该服务将创建并返回压缩的 Excel 文件

标签: c# sql performance sql-manager


【解决方案1】:

解决此问题的唯一正确方法是减少返回给用户的数据量。

让我举个例子:

  • 您的表包含许多需要导出的行
  • 用户想要预览数据,然后将其导出到 Excel
  • 允许用户查看部分数据
    • 前 N 条记录
    • 过滤器(按用户名、部门、​​日期等)
    • 分页(跳过、取走)
  • 用户对所看到的内容感到满意,然后想要导出所有数据
  • 你在服务器上运行它,然后给用户一些进度反馈

【讨论】:

    【解决方案2】:

    如果您的应用程序基于 IIS(如 ASP.NET),您可以使用 Application Object 并在应用程序运行时保存表“Person”中的所有数据开始了。

    【讨论】:

    • 那就更简单了。尝试在主类(Program.cs 默认)中创建静态属性,例如 private static ClassWithData __instance = null; public static ClassWithData INSTANCE { get { if (__instance == null) __instance = new ClassWithData(); return __instance; } } 并在 ClassWithData 中定义构造函数,您可以在其中加载某些属性中的所有数据。然后你可以在程序的任何地方使用这个数据Program.INSTANCE.PersonData
    • 这不是完美的决定,但可以提供一些想法。
    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2022-01-12
    • 2012-08-31
    • 1970-01-01
    • 2015-10-13
    • 2019-05-19
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多