2011-07-19 10 views
6

Hice una prueba como la de abajo ↓¿Hay alguna diferencia entre el Cliente tipo de enumeración Tipo y sistema de enumeración

1) Crear una enumeración cliente (copiar de la 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) Crear dos pruebas método ...

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) método 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) El resultado:

Tester : 3164ms 
DayOfWeek : 7032ms 

Realmente no sé por qué el tipo de sistema de enumeración es más lento que el tipo de enumeración del cliente .... Podría alguien decirme por qué? Gracias ... EDITAR

ACTUALIZACIÓN: Añadir la [ComVisible (true)] para la enumeración.

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


    Monday = 1, 


    Tuesday = 2, 


    Wednesday = 3, 


    Thursday = 4, 


    Friday = 5, 


    Saturday = 6, 
} 

El resultado:

Tester : 5018ms 
DayOfWeek : 7032ms 

El sistema de tipo de enumeración aún más lento que el tipo de enumeración del cliente ...

+0

Solo un disparo en la oscuridad, pero ese enum (DayOfWeek) puede tener un manejo de Culture especial. – leppie

Respuesta

1

Enum se puede decorar con [ComVisible (verdadero)] o [Flags] y cada vez cambia el resultado de la prueba.

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

Usted debe agregar el atributo [ComVisible(true)] si desea comparar manzanas con manzanas.

Cuestiones relacionadas