是一个在64位Windows LARGEADDRESSAWARE上运行的32位ASP.NET应用程序

时间:2009-11-02 14:56:22

标签: asp.net 32bit-64bit

我有一个使用32位非托管DLL的现有32位ASP.NET应用程序。

如果我在64位操作系统上运行它,它会自动成为LARGEADDRESSAWARE(即可以访问完整的4GB虚拟内存)吗?

如果没有,我该怎么办才能使它成为LARGEADDRESSAWARE?

谷歌搜索出现this question,但它缺少上述问题的答案。

修改

This blog表明ASP.NET 1.1工作进程是LARGEADDRESSAWARE,但对ASP.NET 2.0没有提及:

  

如果使用/ 3Gb启动系统   在boot.ini中切换(仅支持   企业和数据中心版本   Windows 2000和所有版本的   Windows XP和Windows Server 2003)a   与...链接的进程   / LARGEADDRESSAWARE开关可以“看到”   3GB。 Aspnet_wp.exe是链接的   在版本1.1中的方式,可以采取   优点。

编辑2

This is another blog 表明32位ASP.NET应用程序是LARGEADDRESSAWARE,但未提及ASP.NET版本:

  

我们找到了那些组件   由ASP.NET框架托管的   利用> 2演出内存   空间

我必须说我对这个主题缺乏权威的公开信息感到惊讶。

2 个答案:

答案 0 :(得分:4)

我设法访问运行Windows 2003 SP2的服务器,答案似乎是肯定的,32位ASP.NET应用程序是LARGEADDRESSAWARE,并且可以访问完整的4GB虚拟内存。

我建立了这个:

  • 使用“dumpbin / headers”检查w3wp.exe(32位IIS工作进程)。这表明LARGEADDRESSAWARE位已设置。

  • 运行一个试图分配超过2GB虚拟内存的32位ASP.NET应用程序:这很成功。

我假设Windows 2008 / IIS7的结果相同,但尚未对其进行测试。

答案 1 :(得分:-1)

不,不会。要使其具有较大的地址感知能力,您必须将IIS作为64位应用程序运行(不使用WOW运行)。这意味着您的32位非托管dll必须替换为它们的64位版本。

通常,当选择编译器选项以定位任何平台时,asp.net将转换为64位应用程序(这是默认设置)。你有32位应用程序的问题是有非托管的32位dll。这些不能在64位应用程序中运行。这意味着您必须将ASP.NET应用程序作为32位应用程序运行,这意味着您必须在64位服务器上安装32位版本的IIS。避免这种情况的唯一方法是将32位非托管dll替换为设计为在64位环境中运行的dll。 32位应用程序无法使用64位服务器上的所有内存,因此您的应用程序将无法“看到”额外的内存。

ASP.NET应用程序将在64位环境中重新编译自己(在编译时提供目标任何环境选项),因此它们不再是32位应用程序。