【问题标题】:32 Bit ASP.NET application on 64 Bit Amazon instance64 位 Amazon 实例上的 32 位 ASP.NET 应用程序
【发布时间】:2011-06-03 18:57:52
【问题描述】:

我有一个用 asp.net mvc2 编写的 Web 应用程序。目前在亚马逊 ec2 32 位中型实例上运行。由于流量巨大,我们希望设置多个实例。但在此之前,我们希望在 64 位实例上运行应用程序。

有任何建议、概念证明、障碍等吗?

【问题讨论】:

  • 应用程序是否编译为仅针对 x86?通常,您可以将 .net 应用程序编译为与处理器无关,并让抖动担心它。如果您目前的目标是 x86,为什么会这样 - 因为这将是理解迁移到 x64 问题的关键。

标签: asp.net-mvc-2 amazon-ec2 32bit-64bit


【解决方案1】:

由于这将是 64 位窗口,因此您还将拥有一个 64 位 IIS 实例。如果您有任何第三方库使用不太常见的组件(如 Mono),您可能需要从源代码重新编译它们或进行一些更改。例如,当我们开始在 64 位 IIS 中托管时遇到了这个问题:

System.BadImageFormatException on running ServiceStack examples.

如果您的应用全是 .NET 并且您没有使用使用本机代码的库,这对您来说可能不是什么大问题。

您还可以将 IIS 工作进程作为 32 位应用程序运行,因此即使遇到问题,它也应该是即插即用的:http://forums.asp.net/p/1156811/1901796.aspx

我最近将一堆 32 位 IIS 主机切换到 64 位,并没有太多问题。

【讨论】:

    【解决方案2】:

    有几件事需要检查,但大多数情况下应该可以正常工作:

    1. 确保所有程序集都编译为“任何 CPU”。
    2. 检查任何可能不兼容 64 位的第三方程序集。
    3. 如果您的应用程序中有任何 COM 互操作/PInvoke,它需要是 64 位友好的(如内存对齐等),在地址的情况下使用 IntPtr 而不是 Int32
    4. 如果不起作用,您可以继续使用 64 位操作系统,只需将 AppPool 更改为使用 WOW。
    5. 试试看。启动新的 EC2 实例很容易。

    我假设人们在切换到 64 位时提到的另一件事是他们认为出现了问题,因为应用程序使用的内存比 32 位时更多。这通常是由“指针膨胀”引起的。地址现在是 64 位宽,而不是 32 位宽。

    在其他一些更极端的情况下,由于 x64 和 x86 .NET Framework 具有不同的 JITer,x64 的优化方式不同,并且会损害性能而不是提高性能。如果不打补丁,这对于 .NET Framework 2.0 来说是一个更大的问题。

    【讨论】:

    • @vcjones 我们目前在应用程序中使用 fluent nhibernate、telerik grid、log4net、mysql 连接器和quartz.net 作为第三方库?你有没有看到任何基于这些第三方库的障碍?
    • @q07 - 如果您还没有,MySQL 连接器将要求您使用“架构独立”版本。 log4net 可以正常工作,流利的 nhibernate 可以正常工作,其余的不确定。
    猜你喜欢
    • 2011-03-07
    • 2011-07-07
    • 2010-12-12
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多