是在64位Windows LargeAddressware上运行的32位ASP.NET应用程序
我有一个使用32位非托管DLL的现有32位ASP.NET应用程序 如果我在64位操作系统上运行它,它会自动成为更大的AddressWare(即可以访问全部4GB的虚拟内存)吗 如果没有,我该怎么做才能使它更大 谷歌出现了,但它没有回答上述问题 编辑 表明ASP.NET 1.1工作进程是大型Addressware,但对ASP.NET 2.0保持沉默: 如果系统以/3Gb启动 boot.ini中的开关(仅在 企业版和数据中心版 Windows 2000和所有版本的 Windows XP和Windows Server 2003)a 与 /大地址软件开关可“查看” 3Gb。Aspnet_wp.exe链接在 在版本1.1中使用,并且可以 这样做的好处 编辑2 这表明32位ASP.NET应用程序是大型Addressware,但没有提到ASP.NET版本: 我们找到了 由ASP.NET框架托管的 利用>2 gig内存 空间是在64位Windows LargeAddressware上运行的32位ASP.NET应用程序,asp.net,32bit-64bit,Asp.net,32bit 64bit,我有一个使用32位非托管DLL的现有32位ASP.NET应用程序 如果我在64位操作系统上运行它,它会自动成为更大的AddressWare(即可以访问全部4GB的虚拟内存)吗 如果没有,我该怎么做才能使它更大 谷歌出现了,但它没有回答上述问题 编辑 表明ASP.NET 1.1工作进程是大型Addressware,但对ASP.NET 2.0保持沉默: 如果系统以/3Gb启动 boot.ini中的开关(仅在 企业版和数据中心版 Windows 2000和所有版本的 Windows XP和Window
我必须说,我对缺乏关于这一主题的权威性公开信息感到惊讶。不,不会的。要使其具有大地址意识,必须将IIS作为64位应用程序运行(不使用WOW运行)。这意味着您的32位非托管DLL必须替换为64位版本的DLL 通常,当选择编译器选项以任何平台为目标(默认)时,asp.net将转换为64位应用程序。您使用的32位应用程序的问题是存在非托管32位DLL。这些不能在64位应用程序中运行。这意味着您必须以32位应用程序的形式运行ASP.NET应用程序,这意味着您必须在64位服务器上安装32位版本的IIS。避免这种情况的唯一方法是将32位非托管DLL替换为在64位环境中运行的DLL。32位应用程序无法使用64位服务器上的所有内存,因此您的应用程序将无法“查看”额外的内存
ASP.NET应用程序将在64位环境中重新编译自身(如果在编译时设置了目标any environment选项),因此它们不再是32位应用程序。我成功访问了运行Windows 2003 SP2的服务器,答案似乎是肯定的,32位ASP.NET应用程序是大型Addressware,并且可以访问完整的4GB虚拟内存 我通过以下方式确定了这一点:
- 使用“dumpbin/headers”检查w3wp.exe(32位IIS工作进程)。这表明设置了LargeAddressware位
- 运行32位ASP.NET应用程序,尝试分配超过2GB的虚拟内存:这是成功的
我假设Windows 2008/IIS7的结果是一样的,但还没有测试过。“不会的。”-谢谢。有这方面的参考资料吗?有可能改变这一点吗?我仍在寻找一篇文章。“要使其具有大地址意识,您必须将IIS作为64位应用程序运行”-这是什么意思?如果它是一个64位应用程序,它将不会在WOW64上运行,并且LargeAddressWare与此无关。