扩展C#数据库应用程序

本文关键字:应用程序 数据库 扩展 | 更新日期: 2023-09-27 18:23:37

如果这个问题有点模糊,我深表歉意。

我正在编写一个C#应用程序,它针对SQL Server数据库进行数据操作。对于一组项目,我读取每个项目的数据,对数据进行计算,然后将结果写入数据库。

我遇到的问题是,当要处理的项目数量增加时,相对于处理每个项目所需的时间,应用程序开始变慢。

在处理分配的对象时,我会非常小心地为它们释放内存。当我开始处理下一个项目时,我希望在处理一个项目的过程中没有任何问题。我使用数据表的"using"结构和BulkCopy类来强制清理内存。

然而,在一次程序调用中,我尝试处理的项目越多,每个项目的运行时间就开始呈几何级数增长。

我的程序是一个WinForms应用程序。我所做的事情似乎并没有占用服务器的内存。我试图将每个项的处理与所有其他项的处理隔离开来,以确保在每次调用应用程序时处理多少项都无关紧要。

是否有人在他们的应用程序中看到过这种行为,并知道如何纠正这种行为?

扩展C#数据库应用程序

如果您使用"using"语句,您是否确保在操作对象时不保持连接打开?最好确保从数据库中获取数据,关闭连接,进行操作,然后将数据发回。

您是否使用存储过程来获取/发送复杂对象?您还可以尝试在存储过程内部或从存储过程调用的函数中进行一些数据操作——您不想将整个业务类卸载到数据库中,但您可以在那里进行一些操作,具体取决于您正在做什么。

确保你的数据结构也得到了优化(主键索引、外键、触发器等)。你可以从http://www.brentozar.com/first-aid/以检查数据库的优化情况。

如上所述,尝试使用一些并行/异步模式来分配您的工作-wait/async对此非常有用,尤其是如果您希望在将以前的数据发送回服务器的同时进行计算。

感谢您的输入。我检查了打开/关闭连接等问题,以确保自己整洁。真正有帮助的是删除目标数据表上的主键。这些设置是相对于最终用户的需求进行的,但它们确实阻碍了数据插入的速度。A提醒人们考虑更新数据与使用数据的数据库约束。

此外,在从内存中的DataTable中使用筛选器进行选择时发现了性能问题。不知怎的,我正在做的事情陷入了大量的争吵(30000)。我意识到我对数据处理不当,并没有真正需要这样做。但它确实向我展示了在尝试拖动这么多数据时,需要对逻辑的每一步进行微观测试。