我写了一个简单的应用程序,它构建了999个项目的并行字典,然后使用ThreadPool.SetMinThreads()
方法激发50个线程。然后,我遍历999个字典条目并更新数据库中的一条记录,以标记条目已被处理。打电脑限制?
运行应用程序时,我可以看到线程已经启动,然后我可以运行SQL查询来查看正在更新的记录。到目前为止,所有这些工作都很顺利。当一些初始线程完成时,下一批线程开始(这正是我想要的)。我仍然可以看到数据库中的记录仍在更新,告诉我应用程序按预期工作。我仍然可以看到正在创建的新线程,然后发生死锁。当我看到僵局时,它是从最初的50个线程中的一个开始的。这是我的问题进来的地方。
我正在使用6Gb RAM的3Ghz双核处理器上运行应用程序。我的SQL Server实例也在同一台机器上运行,但我不会认为这会是一个问题。该应用程序是一个概念证明,但无法在开发环境中运行50个线程看起来并不乐观。我知道在生产环境中,SQL实例将在单独的计算机上运行,应用程序也一样。有任何想法吗?
什么样的死锁 - 在SQL或在您的代码? –
死锁与内存消耗无关,并且与共享状态有关。 –
对不起,它们是SQL死锁 –