RegEx.Match намного медленнее в IIS по сравнению с сервером разработки (Cassini)?

Рассматривая производительность приложения asp.net (webservice), мы заметили, что в IIS оно намного медленнее (38 секунд), чем на сервере Dev (18 секунд). Запустив Профилировщик производительности (в режиме сэмплирования) Visual Studio, мы заметили разницу в вызове regex.Match?! В IIS это занимает 70% времени, выполнение одного и того же теста с тем же приложением на сервере разработки, это занимает менее 1% от общего времени.

Так что любой может объяснить эту странную разницу в поведении между IIS и Dev Server??? Я уже пробовал вещи с другой настройкой пула приложений... но ничего не помогло

1 ответ

Нашел это!

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

При поиске на 64-битном + регулярном регулярном выражении я также обнаружил, что люди уже нашли это в 2006 году, а также что это должно быть исправлено в sp.NET 2.0 (см. http://blogs.msdn.com/b/bclteam/archive/2007/05/21/the-regexoptions-compiled-flag-and-slow-performance-on-64-bit-net-framework-2-0-josh-free.aspx)

Однако я использую.NET 4.0, поэтому я не ожидал, что эта проблема все еще существует...

(О стековом потоке см. Также: Regex slow в Windows Server 2008)

Кстати, если я не использую RegexOptions.Compiled при создании регулярного выражения он также работает быстро на 64-битной. Но мне нужно сделать несколько тестов, чтобы увидеть, как это не компилируется в 32-битной версии.

Другие вопросы по тегам