Alexander,

nein, ich hab es nicht damit verglichen. Aber kannst du gern machen,
hier ist der Source (console application):


using System;

namespace TypeConversionTest {
        class Program {

                class BaseClass { }
                class ClassA : BaseClass { }
                class ClassB : BaseClass { }

                static void Main(string[] args) {

                        Console.WriteLine("Filling array (1 million items) 
...");
                        Console.WriteLine();

                        BaseClass[] a = new BaseClass[1000000];
                        System.Diagnostics.Stopwatch watch = new 
System.Diagnostics.Stopwatch();

                        for (int i = 0; i < a.Length; i++) {
                                BaseClass b;
                                if (i % 2 == 0)
                                        b = new ClassA();
                                else if (i % 3 == 0)
                                        b = new ClassB();
                                else
                                        b = new BaseClass();
                                a[i] = b;
                        }

                        for (int i = 1; i <= 5; i++) {
                                Console.Write("Testing 'GetType()==typeof()' 
... ");
                                int baseCount = 0;
                                int aCount = 0;
                                int bCount = 0;
                                watch.Reset();
                                watch.Start();
                                foreach (BaseClass b in a)
                                        if (b.GetType() == typeof(ClassA))
                                                aCount++;
                                        else if (b.GetType() == typeof(ClassB))
                                                bCount++;
                                        else
                                                baseCount++;
                                watch.Stop();
                                Console.WriteLine("Time: " + 
watch.ElapsedMilliseconds + "
milliseconds or " + watch.ElapsedTicks + " ticks.");

                                Console.Write("Testing 'as' ...                 
 ");
                                baseCount = 0;
                                aCount = 0;
                                bCount = 0;
                                watch.Reset();
                                watch.Start();
                                foreach (BaseClass b in a)
                                        if (b as ClassA != null)
                                                aCount++;
                                        else if (b as ClassB != null)
                                                bCount++;
                                        else
                                                baseCount++;
                                watch.Stop();
                                Console.WriteLine("Time: " + 
watch.ElapsedMilliseconds + "
milliseconds or " + watch.ElapsedTicks + " ticks.");

                                Console.Write("Testing 'is' ...                 
 ");
                                baseCount = 0;
                                aCount = 0;
                                bCount = 0;
                                watch.Reset();
                                watch.Start();
                                foreach (BaseClass b in a)
                                        if (b is ClassA)
                                                aCount++;
                                        else if (b is ClassB)
                                                bCount++;
                                        else
                                                baseCount++;
                                watch.Stop();
                                Console.WriteLine("Time: " + 
watch.ElapsedMilliseconds + "
milliseconds or " + watch.ElapsedTicks + " ticks.");
                                Console.WriteLine();
                        }

                        Console.ReadLine();
                }
        }
}



Viel Vergnügen damit. Würde gern von weiteren Vergleichen hören ;)


On 7/23/05, Alexander Veit <[EMAIL PROTECTED]> wrote:
> Hallo Hannes,
> 
> > also, "as" und "is" sind so gut wie gleich schnell, die dritte
> > (komplizierte) Variante ist viel langsamer. Die Testergebnisse im
> > Detail bei 5 Durchläufen:
> > [...]
> 
> Hast Du das mal mit der Abfrage eines int-Typfelds verglichen? Würde mich
> interessieren wieviel schneller das ist.
> 
> > Auf Wunsch kann ich auch den Source meines kleinen Benchmark Programms
> > nachreichen.
> 
> Gerne.
> 
> 
> Gruß,
> Alex
> 
> _______________________________________________
> CSharp.net Mailingliste, Postings senden an:
> [email protected]
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/csharp.net
> 


-- 
br
Hannes Sachsenhofer
< http://www.sachsenhofer.com >
_______________________________________________
CSharp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/csharp.net

Antwort per Email an