【问题标题】:ASP.NET slower than Console ApplicationASP.NET 比控制台应用程序慢
【发布时间】:2011-08-29 23:55:33
【问题描述】:

我有一个应用程序,它需要大量数据并在一系列非常耗时的周期中对其进行处理。完成的结果应该可以通过 HTTP API 访问。我决定创建一个执行处理的核心库,以及一个在新线程上启动进程的 ASP.NET 应用程序。核心库产生 4 个线程来处理队列中的对象。

但是,这比仅在简单的控制台应用程序中运行处理要慢得多。在我的控制台应用程序中,每个循环的处理时间约为 13-20 秒,平均约为 17 秒,在我的 ASP.NET 应用程序中,处理时间为 13-350(是的,三百五十)秒,平均约为 45 秒。在我的 ASP.NET 应用程序中,每个循环的时间变化很大。

我错过了使用 ASP.NET 框架的明显性能损失吗?我已禁用回收,并且在处理过程中几乎没有处理请求(如果有)。这与线程或垃圾收集有关吗?我怀疑后者,因为大多数循环运行得足够快,而有些循环非常慢,这破坏了我的总处理时间。

我应该离开 ASP.NET 并尝试在我的控制台应用程序中实现 HTTP 侦听器,还是将其改造成 Windows 服务?有什么想法吗?

【问题讨论】:

  • 控制台应用程序运行 32 位,您的 Web 应用程序运行 64 位。如果您使用大量资源,则 Web 应用程序需要比控制台应用程序更多的内存。尝试以 32 位运行您的网络应用程序。顺便说一句,没有一些代码我们只能猜测问题......
  • @peer:如果我运行一个控制台应用程序,它会以 64 位运行,如果我启动一个 Web 应用程序(在 Visual Studio 内部 Web 服务器中),它会以 32 位运行......无论如何,你有一个指出它可能会影响性能,但是为特定目标编译控制台应用程序比将 IIS 更改为 32 位要容易得多。

标签: asp.net performance console-application


【解决方案1】:

显然,ASP.NET 应用程序的执行速度总是比控制台应用程序慢。

原因:

  1. HTTP 协议的开销。

  2. ASP.NET Framework DLL 占用大量内存

  3. 由 ASP.NET 自身控制的有限线程。

您可以使用将由您的应用程序调用的 WCF 服务进行构建。

【讨论】:

  • 1 应该不是问题,因为计算根本不使用 HTTP,我只在计算完成后使用 HTTP 访问结果。 2 可能是真的,与上面的 32 位和 64 位评论相同,但是如果我的计算机没有耗尽内存,它不应该开始交换到影响性能数百% 的程度吗? 3 我认为如果我使用 Thread t = new Thread() 而不是使用线程池,这不是问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2019-06-12
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多