2011-08-29 89 views
1

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

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

使用我错过的ASP.NET框架有没有明显的性能下降?我已经禁用了回收,并且在处理时几乎没有请求被提供,如果有的话。这是否与线程或垃圾收集有关?我怀疑后者,因为大多数循环运行速度不够快,而有些速度非常慢,这会破坏我的总处理时间。

我是否应该离开ASP.NET并尝试在我的控制台应用程序中实现HTTP侦听器,或者将其重新编译为Windows服务?有任何想法吗?

+0

控制台应用程序运行32位,您的Web应用程序在64位。如果您使用了大量资源,则Web应用程序需要更多内存,然后使用您的控制台应用程序。尝试在32位运行你的网络应用程序。顺便说一句,没有一些代码,我们只能猜测问题... – Peter

+0

@peer:如果我运行一个控制台应用程序,它运行在64位,如果我启动一个Web应用程序(在Visual Studio内部Web服务器)它运行在32位。无论如何,你有一点可能会影响性能,但编译特定目标的控制台应用程序比将IIS更改为32位要容易得多。 – Guffa

回答

3

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

原因:

  1. HTTP协议的开销。由ASP.NET本身控制ASP.NET框架DLL的

  2. 有限公司线程

  3. 大内存的使用情况。

你可以建立使用WCF服务,将由您的应用程序调用。

+2

1应该不是问题,因为计算完全不使用HTTP,所以在计算完成后,我只使用HTTP访问结果。 2可能是真实的,与上面的32位和64位注释相同,但是如果我的计算机没有用完内存,它不应该开始交换到影响性能的程度,每分几百美元? 3如果我使用Thread t = new Thread()而不是使用线程池,那么我认为这不是问题? – DukeOf1Cat

相关问题