奇怪的行为 - 应用程序锁定

Posted

技术标签:

【中文标题】奇怪的行为 - 应用程序锁定【英文标题】:Strange behaviour - Application locking up 【发布时间】:2012-01-10 18:09:50 【问题描述】:

这里有问题……

我有这个应用程序,它创建各种自定义 AppDomain,每个应用程序域执行一个程序集及其依赖项,如插件、分离的程序集、操作数据库、自己的资源等。

应用程序运行良好一段时间,但突然,它锁定...进程没有死,它只是冻结,我在它上面运行了一个远程调试器,在线程窗口上我可以看到每个线程,它们的状态是“正在运行”(不是“解冻”),但是在同一个地方,没有执行……我可以暂停并运行调试,它仍然在同一个地方。

代码上没有锁、同步锁、监视器,加载应用程序域的代码非常简单,没什么大不了的。

就像我说的,它可以工作,但过了一会儿,它就锁定了..

对这个环境有什么想法吗?它已经让我发疯了!

如果需要任何代码,我会提供。谢谢。

【问题讨论】:

这里的信息太少了。应用程序锁定时线程在做什么?堆栈跟踪和围绕这些的一些代码 sn-ps 可能会有所帮助。 当你说它操纵数据库时..数据库是否共享相同的连接字符串..??如果是这样,那么也许您正在创建许多新的连接字符串,并且一段时间后连接池已满..我会检查您正在实现某些东西的新实例并且没有正确释放它们的地方..也许将东西包装在一个如有必要,使用()..只是一个建议,没有看到实际代码。 线程完全没有做任何事情,它们的状态是“正在运行”,但实际上并未运行。它被冻结了。并不是每个进程都会操作数据库。 我有一个最近的线索,也许它会有所帮助,跟踪应用程序我收到这条消息:“无法评估表达式。函数:MyProcess.ExecuteDll(),线程:0x2438 Unable to评估表达式。" 这发生在应用程序及时停止之前。 线程所在的“相同位置”是什么? 【参考方案1】:

如果涉及到数据库,您肯定有锁。看一下线程正在执行的 SQL 语句,你可能会发现你手上有一个死锁。

我不确定 SQL Server 是否可以检测到所有死锁,或者是否可以将其配置为不自行解决死锁。

【讨论】:

但这可能吗?在一个单独的域中,使用 oracle 数据库的程序集能够锁定所有其他线程吗?

以上是关于奇怪的行为 - 应用程序锁定的主要内容,如果未能解决你的问题,请参考以下文章

带有休眠和触发器的乐观锁定 - “奇怪”行为

将 Numpad 与修改键一起使用会表现出奇怪的行为

React Native TextInput ref 导致奇怪的崩溃/锁定

Chrome 自动完成锁定输入,就像它们不可点击一样

Postgres:SELECT FOR UPDATE 在锁定释放后看不到新行

Symfony 锁定组件不锁定——如何解决?