Are you sure your site is running in release mode (debug="false" in your web.config, and Release build config for assemblies)? Running in debug mode will turn off lots of optimisations that may cause slowdown.<div>
<br></div><div>It might be worth trying out <a href="http://msdn.microsoft.com/en-us/library/9ek5zak6.aspx">Regex.CompileToAssembly</a> to precompile your regular expressions - This will create a separate .NET assembly which has pre-optimised versions of the regular expressions. However I've found this is only beneficial for very large regular expressions, and regular expressions that are used a lot. So it might not help too much (but it doesn't hurt to try it to see if it makes a difference or not). As far as I know, Mono doesn't support Regex.CompileToAssembly, but you should be able to generate the assembly on Microsoft .NET, and then use the generated assembly with Mono. I haven't tried this myself though.</div>
<div><br></div><div>Out of curiosity, how are you profiling the code?</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Dec 3, 2012 at 1:20 PM, Jordan Earls <span dir="ltr"><<a href="mailto:earlz@lastyearswishes.com" target="_blank">earlz@lastyearswishes.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">So, I recently did a major update to my ASP.Net website running on<br>
Mono (runs on .Net as well, but I work on it and host it with Mono).<br>
Long story short, my websites performance sunk big time. It now takes<br>
110ms for a response that once took less than 20ms.<br>
<br>
I traced down the big difference to using regular expressions as a<br>
part of my routing and a few other things. (I have a custom MVC<br>
framework: <a href="https://bitbucket.org/earlz/barelymvc" target="_blank">https://bitbucket.org/earlz/barelymvc</a>).<br>
<br>
Here are some(maybe all) of the regular expressions being used<br>
(they're really simple):<br>
<br>
@"[^a-zA-Z0-9]\ "<br>
@"[^a-zA-Z0-9\-]"<br>
"^[0-9a-zA-Z]+$"<br>
@"^[-+]?[0-9]*\.?[0-9]+$"<br>
 "^[-+]?[0-9]*$"<br>
"^[0-9A-Fa-f]+$"<br>
<br>
All of these regular expressions are compiled once at application<br>
startup and cached. (with RegexOptions.Compiled). They are used with<br>
with IsMatch(input) or Replace(input, replacement);<br>
<br>
When profiling my application however, the number one most time<br>
consuming method was `System.Text.RegularExpressions.Interpreter:Eval<br>
(System.Text.RegularExpressions.Interpreter/Mode,int&,int)` (my<br>
database functions, which are also not really fast didn't even compare<br>
to the amount of time this function consumed)<br>
<br>
Is there anything I can do to mitigate this problem? I'm using the<br>
latest stable version of Mono (Arch Linux) on a 64-bit platform. Is it<br>
true also that regular expression should now be on par with .Net's<br>
implementation? From what I understand, mono compiles them to IL<br>
correct? Is there anything to watch for in regular expressions that<br>
could give me performance problems like this?<br>
<br>
Thanks,<br>
Jordan<br>
_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</blockquote></div><br></div>