<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div></div><br><div><div>On Feb 14, 2012, at 3:42 PM, Rodrigo Kumpera wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><br><br><div class="gmail_quote">On Tue, Feb 14, 2012 at 2:27 PM, Jonathan Shore <span dir="ltr"><<a href="mailto:jonathan.shore@gmail.com">jonathan.shore@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">I have an application where rules are generated (as part of a genetic algorithm).   Rather than evaluate the rules in interpreted form (which are 5x or more slower than the equivalent compiled code), thinking to use reflection.emit or the mono compiler as a service.<div>
<br></div><div>Millions of rules are generated across time within the scope of one process / AppDomain.   During the computation of fitness each rule is evaluated millions of times, but once fitness is computed, the rule will never need to be evaluated again.   Computing fitness takes 10-20 seconds, so the cost of this in ratio to compilation is small.   Hence increasing the performance by 5x is desirable.</div>
<div><br></div><div>With the above in mind:</div><div><br></div><div><ol><li>I assume I can remove a class created with the compiler as a service?</li></ol></div></div></blockquote><div><br></div><div>No, class unloading only happens as part of AppDomain unloading.</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><ol><li>Would there be residual in the JIT or elsewhere that will accumulate, becoming a memory leak issue?</li>
</ol></div></div></blockquote><div>See the above. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><ol><li>If I am running with llvm enabled, will the compiler as a service or reflection.emit make use of LLVM for JIT?</li>
</ol></div></div></blockquote><div>Yes, but expect compilation times to increase 10 fold.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">
<div><ol><li>Should I prefer the Mono api or reflection.emit for performance or other reasons?</li></ol></div></div></blockquote><div><br></div><div>If you're loading assemblies, it doesn't matter.</div><div><br></div>
<div>From your description you should use dynamic methods since 4.0 collectible assemblies are not supported.</div></div>
</blockquote></div><br></body></html>