【问题标题】:ASP.NET Website no Response while Processing Long ProcessASP.NET 网站在处理长进程时没有响应
【发布时间】:2010-06-11 18:19:08
【问题描述】:

当我的应用程序面临一个长时间的进程时,即获取查询(SELECT a, b, c FROM d) 在 MSSQL Management Studio 中完成此查询需要 10 秒,但是当 ASP.NET 应用程序尝试获取它时,它拒绝对该服务器上的任何其他请求返回任何响应。

我将我的应用程序托管在具有良好规范的 VPS 服务器上,我给出这个示例 (SELECT a, b, c FROM d) 只是为了告诉您问题,它可以是任何进程,可能是处理电影,甚至通过正在减速的外部 API 获取一些数据,或者其他什么。

任何帮助或建议将不胜感激。

【问题讨论】:

    标签: asp.net performance response


    【解决方案1】:

    当您在页面上进行调用时,该页面是使用其中一个应用程序池来获取数据的。如果此调用需要 10 秒才能完成,则此池是此请求的堆栈。

    为了避免这种停止,我可以提出一些方法。

    1. 您可以使用多个应用程序池。在这种情况下,您将面临一些其他问题,为了解决这些问题,您必须在程序的某些部分使用互斥锁,因为您将面临多线程同步问题,

    2. 您可以使用线程与页面并行运行,并进行线程处理,然后释放页面,然后进行一些重新定位以获取结果...或进行任何其他线程技巧来释放池来自处理。

    3. 您可以优化您的 sql 10 秒来运行 somthing 时间太多了。在我的程序中,唯一需要花时间完成的路由是一些统计计算。我让它们在后台运行,缓存结果,然后在它们请求时显示结果。

    希望对您有所帮助。

    【讨论】:

    • 非常感谢。你完全明白了我的意思,过去几天我正在研究 ASP.NET 线程的优缺点,你能解释一下你上面提到的(互斥体)吗?再次,非常感谢。
    • @Ammar 如果您在 asp.net 上设置了 2 个以上的池,那么非常容易 2 个不同的线程同时访问同一部分代码。例如,假设您计算 A 的值,这需要 3 秒,然后您将其保存到数据库中。您需要一个互斥体,因此只有一个池进行计算,否则您可能有 2 个池同时进行相同的思考。所以你需要同步它,唯一的方法是互斥锁。在 inet/MSDN 上搜索它们以找到一些示例。
    【解决方案2】:

    我强烈建议您熟悉 Sql Server Studio 附带的 Sql Profiler。

    启动它,然后查看进出您的 sql 服务器的内容以及持续多长时间。

    您是否收到任何异常或只是超时?

    你能单步调试代码吗?

    它是本地服务器(您的机器)还是其他机器? (可能是网络连接问题)

    【讨论】:

    • 非常感谢您的快速回答。我的想法不是 SQL 本身,这只是一个例子,我从来没有这样的 SQL,我说的是任何需要很长时间的过程。就像有人从托管服务器外部的外部资源请求数据一样,即 RSS 源消费。
    • 当然,但到目前为止,我仍然不确定究竟需要这么长时间。这就是为什么我问这些问题以缩小可能的原因
    • 处理时间长的可能性有很多。其中之一是视频处理(我当前的项目),当然还有从外部网站或资源获取数据,例如 RSS 消费和保存,以及许多其他事情。如果该 RSS 需要很长时间,您的用户将看到死网站,直到该过程结束,这就是我要避免的!
    • 我只是指出了一些方法来缩小导致滞后的原因。尝试为您提供有关如何解决此问题的想法
    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2016-05-10
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多