32-битное приложение ASP.NET на 64-битном экземпляре Amazon - PullRequest
0 голосов
/ 03 июня 2011

У меня есть веб-приложение, написанное на asp.net mvc2.В настоящее время работает на amazon ec2 32-разрядной среде.Из-за огромного трафика мы хотим настроить несколько экземпляров.Но перед этим мы хотим запустить приложение на 64-битном экземпляре.

Любые рекомендации, доказательства концепций, блокпосты и т.д.?

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Поскольку это будут 64-битные окна, у вас также будет 64-битный экземпляр IIS. Если у вас есть сторонние библиотеки, в которых используются менее распространенные компоненты (например, Mono), вам может потребоваться перекомпилировать их из исходного кода или внести некоторые изменения. Например, мы столкнулись с этим, когда начали хостить в 64-битном IIS:

System.BadImageFormatException при запуске примеров ServiceStack.

Это, вероятно, не будет большой проблемой для вас, если ваше приложение полностью .NET и вы не используете библиотеки, которые используют нативный код.

Вы также можете запускать рабочие процессы IIS как 32-разрядные приложения, поэтому они должны быть очень простыми в использовании, даже если у вас возникнут проблемы: http://forums.asp.net/p/1156811/1901796.aspx

Недавно я переключил группу 32-битных хостов IIS на 64-битную, и проблем не было слишком много.

1 голос
/ 03 июня 2011

Есть несколько вещей, которые нужно проверить, но в основном это должно сработать:

  1. Убедитесь, что все ваши сборки скомпилированы в 'Any CPU'.
  2. Проверьте любые сторонние сборки, которые могут быть несовместимы с 64-разрядными.
  3. Если в вашем приложении есть какой-либо COM Interop / PInvoke, он должен быть 64-битным (например, выравнивание памяти и т. Д.), Используя IntPtr вместо Int32 в случае адресов.
  4. Если это не сработает, вы можете остаться в 64-битной операционной системе и просто изменить свой AppPool на использование WOW.
  5. Попробуй. Легко раскрутить новый экземпляр EC2.

Я предлагаю еще одну вещь, которую люди упоминают, когда переходят на 64-битную версию, они думают, что что-то не так, потому что приложение использует больше памяти, чем оно было, когда оно было 32-битной. Это часто вызывается «раздуванием указателя». Адреса теперь имеют ширину 64 бита, а не 32 бита.

В некоторых других, более экстремальных случаях, поскольку x64 и x86 .NET Framework имеют разные JIT-модули, x64 оптимизируется по-разному и может скорее снизить производительность, чем улучшить. Это было более серьезной проблемой для .NET Framework 2.0, когда его не исправили.

...