在ASP.NET IIS中运行的算法比在控制台中运行的算法慢?

在ASP.NET IIS中运行的算法比在控制台中运行的算法慢?,asp.net,performance,iis,Asp.net,Performance,Iis,我有一个搜索API,在控制台应用程序中运行时只需115毫秒,但在ASP.NET 4.8 web应用程序中运行时,相同的代码需要450毫秒。该算法仅使用1个线程。两者都是使用AnyCPU设置构建的。操作系统:Windows 10 64位 为了提高我的web应用程序的性能,我尝试了许多方法并阅读了许多相关主题,但没有成功: 启用32位(不可能) 删除未使用的模块 释放模式 原因可能是什么?您说的是两个测试的同一台计算机和服务器吗?或者一个是托管解决方案,另一个是运行本地的控制台?我的意思是,苹果

我有一个搜索API,在控制台应用程序中运行时只需115毫秒,但在ASP.NET 4.8 web应用程序中运行时,相同的代码需要450毫秒。该算法仅使用1个线程。两者都是使用AnyCPU设置构建的。操作系统:Windows 10 64位

为了提高我的web应用程序的性能,我尝试了许多方法并阅读了许多相关主题,但没有成功:

  • 启用32位(不可能)
  • 删除未使用的模块
  • 释放模式

原因可能是什么?

您说的是两个测试的同一台计算机和服务器吗?或者一个是托管解决方案,另一个是运行本地的控制台?我的意思是,苹果和桔子比较。如果你说的是同一台计算机(比如说运行你的控制台代码),然后在从IIS运行的本地副本启动时运行相同的代码,那么你应该不会看到太多的区别

但是,如果你告诉我你从隔壁的农民那里借了一根绳子?你会认为你也会把一头奶牛拴在绳子上?(你不这么认为吗?)。云托管的解决方案,尤其是Azure(或Amazon)web服务系统经常出现吗

嗯,它们有CPU使用率调控器(左右和中间)(它们调节CPU使用率,以便一个繁重的进程不会影响其他所有进程。因此,您得到的处理率往往非常差(CPU较差)。它们通常处于“奔腾一号”类型的较低范围内

因此,托管网站通常更好(它们没有如此严格的CPU限制)。但随着越来越多的托管网站公司将其托管服务器场切换到云计算系统,我们看到每个用户的CPU都大大降低了

网络托管和使用云计算托管的网站之间有着巨大而惊人的不同。云计算基于一种“实用”模型。这意味着就像你不能用标准的墙上插头来运行焊接设备一样? 好吧,然后你出去买一辆背上有重型发电机的卡车,然后把它用于焊接设备。所以云计算给每个用户的马力要少得多

但就像一家为整个城市提供电力的公司一样,他们以更低的成本为更多的用户提供电力服务。但这也带来了一些限制,比如不让一个家庭消耗太多的电力,而影响那条街上的其他家庭。 因此,为了方便和低成本的供电,你受到了更多的限制。所以你需要使用卡车后面的焊接发电机。电力公司不会让你获得可以运行整座房子的电力

如果这两个测试使用的是同一台计算机、相同的内存和相同的CPU盒,那么在运行时应该不会有太大的差异

然后,您应该不会看到速度或可用CPU有太大的差异。然而,如果这是您的计算机与网格或实用计算(与托管网站相反),那么所有赌注都没有了

编辑:

而海报还没有回来确认这两个测试是否在同一台计算机上运行

web应用程序的编译器优化可能没有打开。而网络或数据库读取在编译器优化打开后不会有太大变化?(因为大部分代码时间都花在.net framework中,而不是应用程序代码中)

但是,对于纯循环和用vb.net编写的代码,或者用C#编写的不适用于网络或数据库的代码

在这些情况下,对编译器进行图灵优化可以将性能提高大约5倍(尤其是循环代码)。这里引用的两个时间之间的差异系数非常接近4-5倍的范围

换句话说,在这个计算机行业中几乎没有什么巧合?考虑到这两次之间的因素?并且考虑到编译器优化也会增加非“主管”循环代码(运行一个人编写的.net代码的时间,而不是运行.net库代码的时间)

那么这是一个非常好的问题来检查

这个选项是:

然后这个选项:

在大多数情况下,溢出没有多大帮助(在大多数情况下,您不会注意到太多差异)


然而,启用循环密集型代码的优化?性能大幅提高-事实上大约是4-5倍。奇迹中的奇迹,已知和经常看到的性能提高与海报报道的控制台应用程序和基于web的应用程序之间的差异差不多。

目前尚不清楚是否存在这种差异这两个测试使用的是同一台计算机吗?从VS启动的任何CPU都将导致控制台应用程序以x32的形式运行。因此,为了更好地进行测试,您最好将两个项目强制为x64位进行测试。请参阅我的帖子中的后续编辑,以检查计算机优化设置。您报告的性能降低通常是错误的当优化计算机设置关闭时,循环密集型代码。