2009-11-02 111 views
3

我有一个现有的使用32位非托管DLL的32位ASP.NET应用程序。是在64位Windows上运行的32位ASP.NET应用程序LARGEADDRESSAWARE

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

如果不是,我该怎么做才能使它成为LARGEADDRESSAWARE?

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

EDIT

This blog表明ASP.NET 1.1工作进程LARGEADDRESSAWARE,但没有提及ASP.NET 2.0:如果一个系统与/ 3GB 开关启动

在boot.ini中(仅在 企业和数据中心版本 Windows 2000和所有版本的 Windows XP和Windows Server 2003上受支持) 进程与 /LARGEADDRESSAWARE开关可以“看到” 3Gb。 Aspnet_wp.exe在版本1.1中以 的方式链接,并且可以采用 的优势。

EDIT 2

This is another blog这表明,32位ASP.NET应用程序是LARGEADDRESSAWARE,但没有提到ASP.NET版本:

我们发现的组件被ASP.NET框架托管的 分别利用了> 2演出内存 空间

我必须说我对这方面缺乏权威性的公开信息感到惊讶。

回答

4

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

我通过建立这样的:

  • 使用 “DUMPBIN /标头” 检查w3wp.exe的(32位IIS工作过程)。这表明LARGEADDRESSAWARE位已设置。

  • 运行试图分配2GB以上虚拟内存的32位ASP.NET应用程序:这是成功的。

我假设结果对于Windows 2008/IIS7是一样的,但还没有测试过。

-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位应用程序。

+0

“不,它不会。” - 谢谢。任何参考资料?有没有可能改变这一点? – Joe 2009-11-02 15:04:17

+0

我仍在寻找一篇文章。 – kemiller2002 2009-11-02 16:30:39

+0

“为了使其能够识别大地址,必须将IIS作为64位应用程序运行” - 这是什么意思?如果它是一个64位应用程序,它将不会在WOW64上运行,并且LARGEADDRESSAWARE不相关。 – Joe 2009-11-02 19:35:12

相关问题