Slow performance compared to C++, ideas?

Kapps opantm2+spam at gmail.com
Thu Jun 6 08:06:37 PDT 2013


On Thursday, 6 June 2013 at 01:08:36 UTC, deadalnix wrote:
> This is why I wrote that this may have been true in the past. 
> Nevertheless, it is completely false today.

C# often does not inline virtual methods, and even if it can 
inline them there's still an overhead. This (2008) article goes 
into depth about how it handles it: 
www.codeproject.com/Articles/25801/JIT-Optimizations - 
Essentially uses frequency analysis to determine if the virtual 
method call is still going to call the same method as it would 
previously. Regardless, we can not perform such optimizations, so 
whether or not it applies to C#, it does apply to D.

> History also showed us that C# introduced way to revirtualize 
> method, for several purposes like mock. We can't simple take 
> this argument and don't look at it with the light of history.

It doesn't revirtualize anything. C# has a profiler API that 
mocking frameworks can use to replace methods with their own 
implementations (ie: Microsoft's Moles Framework). Simply making 
a method virtual is not sufficient as static methods could then 
not be mocked. Besides that, making your classes / methods 
virtual for the sole purpose of mocking seems like a bad idea to 
me. Even if virtual was the default though, you still have to 
worry about final methods. Java for example uses frameworks such 
as Mockito to allow you to mock final methods (and static methods 
as well); the virtual by default doesn't change that.


More information about the Digitalmars-d mailing list