gpt4 book ai didi

.net - global.asax 上缓慢的 Application_Start 造成死锁

转载 作者:行者123 更新时间:2023-12-02 00:30:55 25 4
gpt4 key购买 nike

我在 global.asax 上的 Application_Start 代码需要 2-3 分钟才能完成(长时间的数据库查询等)

每当我发布网站的新版本时,我都会在 aspnet_isapi.dll 上遇到死锁并且应用程序无法启动。

启动它的唯一方法是当我禁用从 Internet 访问 IIS 时,再次重新启动应用程序并调用该站点(以便 global.asax)工作。

我不明白为什么当我在应用程序启动时收到大量页面/文件请求时会发生死锁。我知道 global.asax 上的 Application_Start 只触发一次,而且我猜所有其他客户端只是等待事件完成,所以我看不出它有死锁的原因。

有什么想法吗?

更新:

大约需要 4-5 分钟...代码是进行数据库查询并将它们附加到 Application 变量(供以后使用)。它是我的专用服务器上的虚拟服务器。只有另一台机器在不占用太多资源。我收到事件 ID 2262 - ISAPI '...\aspnet_isapi.dll' 将自身报告为不健康,原因如下:'检测到死锁'。

有一个 SQL 查询占用了大部分时间。我可以在不同的进程(windows 服务等)上执行此查询,但问题是我不明白为什么会这样......如果将来我不得不在 Application_Start 中放入一些耗时的代码,会发生什么情况?

最佳答案

这种方法有几个问题。

首先 - 加载那么多数据并将其粘贴在应用程序中似乎过分了。我可以在那么多的时间内查询数百万条记录,因此我会检查您的索引和查询以确保这确实是必要的。您要加载哪些类型的数据必须进入应用程序?还请记住,您将增加应用程序的工作内存,这在某些时候可能会导致它根据 IIS 工作进程设置进行重置。

Application_Start 应该尽快完成,以便运行时知道一切加载正常。我相信您的死锁不是典型情况下的死锁,而是“我认为它卡住了”的情况。

如前所述 - 一种选择是将您的处理拉出到另一个线程中。但是请注意,当您的应用程序闲置一段时间后,它将被关闭。虽然您可以在 IIS 中更改这些设置,但我真的会考虑重新考虑这种数据加载。为什么不从数据库中按需查询呢?您可以在数据库端使用此数据创建一个新的索引 View (以及其他建议)

关于.net - global.asax 上缓慢的 Application_Start 造成死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com