Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net global.asax上的应用程序启动缓慢会导致死锁_.net_Asp.net_Iis_Windbg_Deadlock - Fatal编程技术网

.net global.asax上的应用程序启动缓慢会导致死锁

.net global.asax上的应用程序启动缓慢会导致死锁,.net,asp.net,iis,windbg,deadlock,.net,Asp.net,Iis,Windbg,Deadlock,我在global.asax上的应用程序启动代码需要2-3分钟才能完成(长时间的数据库查询等) 每当我发布网站的新版本时,aspnet_isapi.dll上就会出现死锁,应用程序不会启动 启动它的唯一方法是,当我禁用从internet访问IIS时,再次重新启动应用程序&对站点进行一次调用(以便global.asax)工作 我不明白为什么在应用程序启动时收到大量页面/文件请求时会发生死锁。我知道Application_在global.asax上只启动一次,我猜所有其他客户端都只是等待事件完成,所以我

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

每当我发布网站的新版本时,aspnet_isapi.dll上就会出现死锁,应用程序不会启动

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

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

有什么想法吗

更新:

大概需要4-5分钟。。。 代码用于进行db查询并将其附加到应用程序变量(供以后使用)。 这是我专用服务器上的虚拟服务器。只有另一台机器在运行,不会占用太多资源。 我得到事件ID 2262-ISAPI'..\aspnet_ISAPI.dll'报告自身不健康,原因如下:“检测到死锁”

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

这种方法有几个问题

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

应用程序启动应该尽快完成,以便运行时知道加载的所有内容。我相信你的僵局不是典型的僵局,而是“我认为它卡住了”的僵局


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

@ Sayy),也许您应该考虑在不同线程上运行应用程序启动代码。@问题是,应用程序需要在应用程序中启动并填充的变量。我加载的数据大部分是静态数据,因此我不必每次都查询数据库。事实上,我可以更好地索引表,但对于我正在使用的这个特定查询(几天只需要发生一次),我认为索引不是一件好事。这可能会降低性能,因为此特定表会大量增长。我在这里也可能错了……)我想我会创建一个作业来偶尔运行这个查询,而不是将它放在应用程序启动中。剩下的唯一问题是为什么会发生这种情况。。。我不认为这是一个“我认为它卡住了”的场景,因为当我第一次加载应用程序并且只对它发出一个请求(应用程序开始启动)时,一切都正常。也许在某种程度上是排队限制?如果是这样的话,为什么是死锁而不是正常的异常?如果这是所有数据每隔几天准备一次,那么用DB进程来填充暂存表如何?对于死锁-我明白你说的不死锁是什么意思,除非有多个请求。在这种情况下很难说-可能有内部逻辑来记录某个特定的重复应用程序的启动-不确定-尽管建议将应用程序的启动时间尽可能短,这样做可能是一个意外的“好处”,即长时间和多个请求进入应用程序。无论代码想从aspnet_isapi.dll向iis报告什么-但不确定内部结构是否正确。