Ayende @ Rahien

My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:


+972 52-548-6969

, @ Q c

Posts: 6,026 | Comments: 44,844

filter by tags archive

Not all objects are created equals

time to read 1 min | 126 words

I found something extremely surprising while profiling a project. Take a look at this piece of code:

Stopwatch stop = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
	new WeakReference(null);
Console.WriteLine("WeakRef: " + stop.ElapsedMilliseconds);

stop = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
	new string('a', 5);
Console.WriteLine("'aaaaa': " + stop.ElapsedMilliseconds);

On my machine, this has the following output:

WeakRef: 980
'aaaaa': 35

Creating a WeakReference is much more costly than creating a normal object. Not surprising, when you think of it, WeakReference has deep ties to the CLR, but I couldn't really believe it when I saw it the first time.



Isn't the object created equally it just depends on the amount of work done in the Constructor (ctor)?

Damien Guard

The constructor for WeakReference makes a call to GCHandle, which makes an extern call. The result of which is ~0.000850ms difference.

Why is it surprising? Do all your objects with constructors create in exactly the same amount of time?


Ayende Rahien

Run it in a profiler, you'll see where that cost is

Ken Egozi

not sure, but due to the immutability of string, it might've created a single 'aaaaa' object.

did you try to call i.ToString() instead? (would new a string so it's quite the same). or, new string('a', i) ?

Ayende Rahien


It doesn't matter what string you are using, or whatever you create another type

Bill Pierce

Are you sure that string interning doesn't have something to do with the performance of the string test?

Ayende Rahien

Try it with date time, or your own class

Comment preview

Comments have been closed on this topic.


No future posts left, oh my!


  1. Technical observations from my wife (3):
    13 Nov 2015 - Production issues
  2. Production postmortem (13):
    13 Nov 2015 - The case of the “it is slow on that machine (only)”
  3. Speaking (5):
    09 Nov 2015 - Community talk in Kiev, Ukraine–What does it take to be a good developer
  4. Find the bug (5):
    11 Sep 2015 - The concurrent memory buster
  5. Buffer allocation strategies (3):
    09 Sep 2015 - Bad usage patterns
View all series


Main feed Feed Stats
Comments feed   Comments Feed Stats