我编写了一个简单的应用程序,它构建了一个包含 999 个项目的并发字典,然后使用该ThreadPool.SetMinThreads()
方法触发了 50 个线程。然后,我遍历 999 个字典条目并更新数据库中的一条记录,以标记一个条目已被处理。
运行应用程序时,我可以看到线程已经启动,然后我可以运行 SQL 查询来查看正在更新的记录。到目前为止,所有这些都运作良好。当一些初始线程完成后,下一批线程开始(这正是我想要它做的)。我仍然可以看到我在数据库中的记录仍在更新,告诉我应用程序正在按预期工作。我仍然可以看到正在创建的新线程,然后出现死锁。当我查看死锁时,它来自最初的 50 个线程之一。这就是我的问题所在。
我在具有 6Gb RAM 的 3Ghz 双核处理器上运行该应用程序。我的 SQL Server 实例也在同一台机器上运行,但我没想到这会是个问题。该应用程序是一个概念证明,但不能在开发环境中运行 50 个线程看起来并不乐观。我知道在生产环境中,SQL 实例将在单独的机器上,应用程序也是如此。有任何想法吗?