我一直在 IIS 中使用两个不同的 ASP.NET Web 应用程序运行负载测试。测试使用 5、10、25 和 250 个用户代理运行。测试在具有 8 GB RAM、Windows 7 Ultimate x64 的机器上进行。同一台机器同时运行 IIS 和负载测试项目。
我进行了很多次运行,数据非常一致。对于每次加载,如果在应用程序池中将“启用 32 位应用程序”设置为 True,则会看到较低的“平均页面时间(秒)”和较低的“平均响应时间(秒)”。负载越高,差异就越明显。在负载非常高的情况下,如果应用程序池是 64 位的,Web 应用程序就会开始抛出错误 (503),但如果设置为 32 位,它们就可以跟上。
为什么 32 位应用程序池效率更高?为什么应用程序池的默认设置不是 32 位?
答案1
64 位内存指针和其他相关数据结构比 32 位内存指针和其他相关数据结构大两倍。此外,64 位工作线程在切换模式时每次必须访问 32 位代码或 DLL 时都会产生惩罚。(研究 WoW64 和 thunking。)
使用 64 位的最大(但不是唯一)优势是能够寻址很多更多内存。如果您的应用程序池使用的内存不超过 2 或 3 GB,并且您不需要运行 64 位代码,那么您可能没有充分的理由选择 64 位。随着技术的进步,芯片制造商正在专门为 64 位处理器制造额外的 CPU 寄存器以提高其性能,但一般来说,仅使用更多位数并不能神奇地提高性能。事实上,正如您刚刚看到的那样,情况可能会更糟。
64 位 = 艾布拉姆斯坦克
32 位 = 丰田普锐斯
一个人可以完成更多的工作,但另一个人却可以通过麦当劳的免下车服务完成工作。