0

作为我们日常工作流程的一部分,我正在处理大约 35 批更新许多数据库的工作。每一批都是在一个 Web 应用程序中开发的。由于数据库问题,我将所有这些都收集在一个 Windows 应用程序中以利用数据库连接池,并且我为每个批次分配了一个后台工作程序。在应用程序中达到 20 批,一切正常。但是当我为任何其他批次添加任何其他后台工作程序时,应用程序会挂起。我认为这是因为我在一个进程中运行了太多线程。是否有解决此问题的方法,例如,使应用程序与多个进程一起工作??!!!。问候,

注意,我为这个应用程序分配了一台机器(Core i7 cpu,8 gb ram)。

4

2 回答 2

0

如果您的 UI 在许多后台工作线程处于活动状态时冻结,但在这些后台工作线程完成处理后恢复,则可能 UI 线程正在执行一个方法,该方法等待来自后台工作线程之一的结果或信号。

要解决您的问题,您将不得不寻找处理同步/多线程的 UI 相关代码。这可能是使用 .NET 的许多同步对象之一的地方(包括lock语句),但它也可能涉及“哑”轮询循环 a-ka while(!worker.IsFinished) Thread.Sleep();

冻结的另一个可能原因可能是您在 UI 线程中而不是在后台线程中意外地运行了工作程序(或与工作程序相关的方法)。

但是当你使用调试器时你会发现。

为了使您寻找有问题的方法的范围保持可控,让您的程序在调试器中运行,直到 UI 冻结。此时,在调试器中暂停程序执行。查看 UI 线程正在处理的代码,您会发现一个违规代码实例。(无论有什么问题,我都不能告诉你——因为我不知道你的代码。)

您的代码中与 UI 相关的不同方法很可能会遇到相同的问题。所以,如果你发现了有问题的代码(并且能够修复它),你会想要检查其他有问题的方法,但这应该很容易,因为那时你会知道要寻找什么......

于 2013-10-20T14:22:29.227 回答
0

您必须更新多少个数据库?

我认为更建议将线程数作为数据库数

于 2013-10-20T13:29:57.603 回答