C# SQL 查询滞后
Posted
技术标签:
【中文标题】C# SQL 查询滞后【英文标题】:C# SQL query is lagging 【发布时间】: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 文件 【参考方案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
。
这不是完美的决定,但可以提供一些想法。以上是关于C# SQL 查询滞后的主要内容,如果未能解决你的问题,请参考以下文章