Funny, I get exactly the inverse behavior both in debug and release ... ?!

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
 class Program
 {
   static void Main(string[] args)
   {
     const int Count = 1000000;

     DateTime now = DateTime.Now;
     for (int i = 0; i < Count; i++)
     {
       MyReferenceType t = Activator.CreateInstance<MyReferenceType>();
     }
     Console.WriteLine("typed ref:\t {0}", DateTime.Now.Ticks - now.Ticks);

     now = DateTime.Now;
     for (int i = 0; i < Count; i++)
     {
       MyReferenceType t = (MyReferenceType)
Activator.CreateInstance(typeof(MyReferenceType));
     }
     Console.WriteLine("untyped ref:\t {0}", DateTime.Now.Ticks - now.Ticks);

     now = DateTime.Now;
     for (int i = 0; i < Count; i++)
     {
       MyValueType t = Activator.CreateInstance<MyValueType>();
     }
     Console.WriteLine("typed val:\t {0}", DateTime.Now.Ticks - now.Ticks);

     now = DateTime.Now;
     for (int i = 0; i < Count; i++)
     {
       MyValueType t = (MyValueType)
Activator.CreateInstance(typeof(MyValueType));
     }
     Console.WriteLine("untyped val:\t {0}", DateTime.Now.Ticks - now.Ticks);

     Console.ReadKey();
   }

   class MyReferenceType
   {
     public int dummy;
   }

   struct MyValueType
   {
     public int dummy;
   }
 }
}

On 2/28/07, Frans Bouma <[EMAIL PROTECTED]> wrote:
I was benchmarking some type instantiation code, and I stumbled upon this:

when I instantiate in a loop 1,000,000 times a class with the code:

MyType t = Activator.CreateInstance<MyType>();

it takes 2800ms or thereabout.

When I use:
MyType t = (MyType)Activator.CreateInstance(typeof(MyType));

it takes 330ms or thereabout

(debug builds).

why this big difference? The code internally (peeking with reflector) shows
two different code paths, though I then wonder, why isn't
Activator.CreateInstance<T> implemented as:

public T CreateInstance<T>()
{
       return (T)Activator.CreateInstance(typeof(T));
}

?

       FB

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com



--
Sébastien
www.sebastienlorion.com

Reply via email to