2011-07-19 14 views
6

Zrobiłem test jak poniżej ↓Czy jest jakaś różnica między Klientem typu Enum Typ i systemu Enum

1) Tworzenie enum klienta (kopia z DAYOFWEEK)

[Serializable] 
public enum Tester 
{ 
    // 概要: 
    //  Indicates Sunday. 
    Sunday = 0, 
    // 
    // 概要: 
    //  Indicates Monday. 
    Monday = 1, 
    // 
    // 概要: 
    //  Indicates Tuesday. 
    Tuesday = 2, 
    // 
    // 概要: 
    //  Indicates Wednesday. 
    Wednesday = 3, 
    // 
    // 概要: 
    //  Indicates Thursday. 
    Thursday = 4, 
    // 
    // 概要: 
    //  Indicates Friday. 
    Friday = 5, 
    // 
    // 概要: 
    //  Indicates Saturday. 
    Saturday = 6, 
} 

2) Utwórz dwa testy metoda ...

static void TestEnumToString() 
    { 
     var t = Tester.Sunday; 
     Enumerable.Range(0, 1000000).ToList().ForEach(i => t.ToString()); 
    } 

    static void DayOfWeekEnumToString() 
    { 
     var t = DayOfWeek.Sunday; 
     Enumerable.Range(0, 1000000).ToList().ForEach(i => t.ToString()); 
    } 

3) metoda Main

static void Main() 
    { 
     Stopwatch sw = new Stopwatch(); 
     sw.Start(); 
     TestEnumToString(); 
     sw.Stop(); 
     Console.WriteLine("Tester:" + sw.ElapsedMilliseconds); 


     sw = new Stopwatch(); 
     sw.Start(); 
     DayOfWeekEnumToString(); 
     sw.Stop(); 
     Console.WriteLine("DayOfWeek:" + sw.ElapsedMilliseconds); 

     Console.ReadKey(); 
    } 

4) Wynik:

Tester : 3164ms 
DayOfWeek : 7032ms 

ja naprawdę nie wiem, dlaczego system typu enum jest wolniejszy niż typu enum klient .... Czy ktoś może mi powiedzieć dlaczego? Dziękuję ...

UPDATE EDIT: Dodać [ComVisible (true)] do wyliczenia.

[ComVisible(true)] 
[Serializable] 
public enum Tester 
{ 
    Sunday = 0, 


    Monday = 1, 


    Tuesday = 2, 


    Wednesday = 3, 


    Thursday = 4, 


    Friday = 5, 


    Saturday = 6, 
} 

Rezultat:

Tester : 5018ms 
DayOfWeek : 7032ms 

układ typu enum jeszcze wolniej niż typ enum klient ...

+0

Po prostu strzał w ciemności, ale to wyliczenie (DayOfWeek) może mieć specjalne właściwości kulturowe. – leppie

Odpowiedz

1

Enum można ozdobić za pomocą [ComVisible (true)] lub [Flags] i za każdym razem, gdy zmienia wynik testu.

[Serializable] 
//[Flags] 
[ComVisible(true)] 
public enum Tester 
{  
    // 概要: 
    //  Indicates Sunday. 
    Sunday = 0,  
1

należy dodać atrybut [ComVisible(true)] jeśli chcesz porównać jabłka do jabłek.

Powiązane problemy