【问题标题】:Winforms C# .Add() to sql database is VERY slowWinforms C# .Add() 到 sql 数据库非常慢
【发布时间】:2022-01-22 10:45:30
【问题描述】:

我有一个用 C# 编写的 Windows 窗体应用程序。一种是数据输入表单,带有保存按钮。

点击保存按钮后,代码首先将所有文本框转换为大写字母。然后它将 SQL 表字段的所有变量声明到识别文本框

ex(有几种类型的绑定)

var vlast = textBox_V_lname.Text;

正如预期的那样,所有这些工作都非常快(我使用断点来查找延迟)。在这里,一切都挂起。它挂起大约 30 秒(这是一个很长很长的时间,当表中只有 900 条记录时)。

var badger_History = new Badger_History() { v_noaccess_flag = myacess, v_lastname = vlast, v_firstname = vfirst, v_child = vchild, v_company = vcompany, v_issue_date = vdate, v_location = mylocation, comments = mycomments, h_lastname = hlast, h_firstname = hfirst, h_middle_init = hmiddle, h_title = htitle, h_phone = hphone, h_org = horg, h_work_location = hlocation, pass_type = type, pending_flag = pending };
            oBadger_History.Add(badger_History);

它就挂在这里:oBadger_History.Add(badger_History);

badger_History 是表格插入的模型。我可以发布模型本身,但这看起来很正常。

我当然尝试过使用 SQL 管理器手动添加记录,并且按预期立即工作。

我无法弄清楚导致挂起的原因。当我将鼠标悬停在“oBadger_History.Add”上并转到定义时,我看到的只是这一行

public virtual void Add(EntityType entity);

注意:这是另一位员工开发的应用程序,现已退休。我通常不使用 Winforms 应用程序,所以 - 我在这里不知所措。

感谢您对正确方向的任何见解或推动。

我可以根据需要添加更多代码 - 只是不确定是否需要发布更多代码

【问题讨论】:

  • 你使用的是什么 ORM。什么是 SQL 管理器
  • 您需要找到该Add 方法的所有实例,因为它被派生类覆盖。不幸的是,您的表现不足以让我们指出您应该在哪里寻找或真正提供帮助。 public virtual void Add(EntityType entity); 应该有一个与之关联的类。
  • 是您要添加到列表中的列表还是实际的 dbcontext?该列表中有多少条记录?列表中的记录越多,插入的速度就越慢。如果可能,每次都使用新的 dbcontext

标签: c# winforms


【解决方案1】:

不要使用Add 方法,而是使用AddRange 方法。后者内部基于二分法计算,其性能为n * log(n),优于前者n * n。

【讨论】:

  • “后者内部根据二分法计算”是什么意思?我知道dichotomy 的意思是:“两个事物之间的区分或对比,它们被或被表示为对立或完全不同的事物”。我不明白这是如何应用的。
  • 你说的its performance is n * log (n), which is better than the former n * n是什么意思?
  • 我们知道OP的模型有一个AddRange方法吗?
  • oBadger_ 历史是列表吗?如果是这样,就会有一个 addrange 方法。
  • 这不是List<>。 OP 通过签名 public virtual void Add(EntityType entity); 明确说明了这一点。
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多