【问题标题】:Is a 32-bit ASP.NET app running on 64-bit Windows LARGEADDRESSAWARE是在 64 位 Windows LARGEADDRESSAWARE 上运行的 32 位 ASP.NET 应用程序
【发布时间】:2010-12-12 07:36:49
【问题描述】:

我有一个使用 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) 与 /LARGEADDRESSAWARE 开关可以“看到” 3Gb。 Aspnet_wp.exe 链接在那个 在 1.1 版中的方式,可以采取 优势。

编辑 2

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

我们找到了 由 ASP.NET 框架托管的是 利用 > 2 gig 内存 空间

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

【问题讨论】:

    标签: asp.net 32bit-64bit


    【解决方案1】:

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

    我是这样建立的:

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

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

    我假设 Windows 2008 / IIS7 的结果是相同的,但尚未测试。

    【讨论】:

      【解决方案2】:

      不,它不会。要使其能够感知大地址,您必须将 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 位应用程序。

      【讨论】:

      • “不会。” - 谢谢。有这方面的参考吗?是否有可能改变这一点?
      • 我还在找文章。
      • “要让它感知大地址,你必须将 IIS 作为 64 位应用程序运行”——这是什么意思?如果它是 64 位应用程序,它不会在 WOW64 上运行,并且 LARGEADDRESSAWARE 不相关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2011-07-06
      • 2011-05-13
      • 1970-01-01
      • 2010-10-18
      相关资源
      最近更新 更多