6

asp.net (webservice) アプリケーションのパフォーマンスを見ていると、IIS では開発サーバー (18 秒) よりもはるかに遅い (38 秒) ことに気付きました。Visual Studio のパフォーマンス プロファイラーを (サンプリング モードで) 実行すると、regex.Match の呼び出しに違いがあることがわかりました。IIS では 70% の時間がかかり、開発サーバーで同じアプリに対して同じテストを実行すると、合計時間の 1% 未満しかかかりません。

では、IIS と Dev Server の間のこの奇妙な動作の違いを誰でも説明できますか? 私はすでに別のアプリケーションプール設定で試してみました...しかし、何も役に立ちませんでした

4

1 に答える 1

5

それを見つけた!

これは、IIS が 64 ビット (およびおそらく 32 ビットの casinni) で実行しているためと思われます。アプリケーション プールを 32 ビットを使用するように切り替えると、IIS でも高速になり、64 ビットにリセットすると再び低速になります。

64 ビット + regex slow で検索したところ、2006 年にすでにこれが発見されており、.NET 2.0 の SP で修正されるはずだったことがわかりました ( 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を使用しているため、その問題がまだ存在するとは思っていませんでした...

(stackoverflow については、「 Windows Server 2008 での正規表現が遅い」も参照してください)

ところで、正規表現を作成するときに を使用しないと、64 ビットでも高速に実行されますしかし、コンパイルしないことによる 32 ビットへの影響を確認するには、ベンチマークを行う必要があります。RegexOptions.Compiled

于 2012-07-07T13:03:58.730 に答える