2012-07-06 13 views
6

Osservando le prestazioni di un'applicazione asp.net (webservice), abbiamo notato che su IIS è molto più lento (38 secondi) rispetto a Dev Server (18 secondi). Eseguendo il profiler delle prestazioni (in modalità campionamento) di Visual Studio abbiamo notato che la differenza sta chiamando regex.Match ?! In IIS sta prendendo il 70% delle volte, eseguendo lo stesso test contro la stessa app nel server di sviluppo, sta impiegando meno dell'1% del tempo totale.RegEx.Match è molto più lento in IIS rispetto al server di sviluppo (Cassini)?

Quindi chiunque può spiegare questa strana differenza di comportamento tra IIS e Dev Server ??? Ho già provato cose con diverse impostazioni del pool di applicazioni ... ma nulla ha aiutato

+1

lo hai misurato solo una volta? –

+0

no, più volte. Anche riavviato nel mezzo: è coerente – Tjipke

risposta

5

Trovato!

Sembra essere perché IIS lo sta eseguendo a 64 bit (e casinni probabilmente a 32 bit). Cambiando il pool di applicazioni per utilizzare 32 bit, è anche veloce in IIS, ripristinandolo a 64 bit ed è di nuovo lento.

Effettuando una ricerca su 64 bit + regex lento, ho anche scoperto che le persone già pensa che questa nel 2006, e anche che avrebbe dovuto essere fissato in una sp su .NET 2.0 (vedi: 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)

Tuttavia io uso di .NET 4.0, quindi non sarei aspettato che problema di esistere ancora ...

(su StackOverflow vedi anche: Regex slow on Windows Server 2008)

BTW se faccio non utilizzare il RegexOptions.Compiled durante la creazione del regex, è anche esegue veloce su 64 bit. Ma ho bisogno di fare un benchmarking per vedere quale sia l'effetto di non compilarlo su 32 bit.

Problemi correlati