为什么32位应用程序池在IIS中更高效?

我一直在使用IIS中的两个不同的ASP.NET Web应用程序运行负载testing。 testing用5,10,25和250个用户代理运行。 testing在一个8 GB的RAM,Windows 7旗舰版x64的框。 运行IIS和负载testing项目的同一个框。

我做了很多次运行,数据非常一致。 对于每个负载,如果我在应用程序池中将“启用32位应用程序”设置为True,则会看到较低的“平均页面时间(秒)”和较低的“平均响应时间(秒)”。 负载越高,差异越明显。 在负载非常高的情况下,如果应用程序池是64位的,则Web应用程序开始抛出错误(503),但如果设置为32位,它们可以保持不变。

为什么32位应用程序池更有效率? 为什么不是应用程序池32位的默认值?

    64位内存指针和其他相关数据结构是其32位对应的两倍。 另外,一个64位的工作线程在切换模式时,每次访问32位代码或DLL时都会受到惩罚。 (研究WoW64和thunking。)

    使用64位的最大(但不是唯一的)优势是能够处理更多的内存。 如果您的应用程序池不使用超过2 GB或3 GB的内存,并且您并不特别需要运行64位代码,那么您可能不会有一个令人信服的理由去使用64位。 随着技术的进步,芯片制造商正在增加CPU寄存器,特别是64位处理器来提高性能,但一般来说,仅仅使用更多位,不会有神奇的性能提升。 事实上,正如你刚刚目睹的那样,情况可能会更糟。

    64位=艾布拉姆斯坦克

    32位=丰田普锐斯

    一个人可以完成更多的工作,但另一个可以通过麦当劳的传播。