Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Reflection actually isn’t too inefficient, especially compared to using dynamic languages. I think a lot of the inefficiency is a bunch of small inefficiencies which combine together to make it very heavyweight.


> Reflection actually isn’t too inefficient

My understanding is that it's completely uncached. It couldn't be any less efficient.


Obtaining a Method object is, I think, pretty slow. But calling through one is fast - I'm not sure what happens exactly, but after some number of calls, some sort of JITting or some such happens and a call via a Method object is as fast as as through a handwritten equivalent (which does the same unpacking of arguments etc).


The overhead of, for example, invoking a method via reflection is measured in single-digit nanoseconds. Still not as fast as direct invocation, but unlikely to be a bottleneck unless you perform 10-of-millions of them per second.


Actually finding the method via reflection is the time consumer.

Once you have the method reference, actually invoking it isn’t any different than a regular method.


Although I can't tell you why, it's been my experience that firing a simple method via reflection in both .NET and the JVM is roughly 2x the time of direct calls (or of calls via the 'dynamic' keyword in C#).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: