【发布时间】: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