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