客户枚举类型和系统枚举类型之间有什么区别吗?

6
我做了一个如下的测试↓

1)创建一个自定义枚举(从星期几复制)

[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) 创建两个测试方法...

    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) 主方法

    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) 结果:

Tester : 3164ms
DayOfWeek : 7032ms

我真的不知道为什么系统类型枚举比客户类型枚举慢... 有人能告诉我原因吗? 谢谢...
更新编辑: 将[ComVisible(true)]添加到枚举中。
[ComVisible(true)]
[Serializable]
public enum Tester
{
    Sunday = 0,


    Monday = 1,


    Tuesday = 2,


    Wednesday = 3,


    Thursday = 4,


    Friday = 5,


    Saturday = 6,
}

结果如下:
Tester : 5018ms
DayOfWeek : 7032ms

系统的枚举类型仍然比客户的枚举类型慢...

只是猜测,但是这个枚举(DayOfWeek)可能有特殊的文化处理。 - leppie
2个回答

1

枚举可以使用[ComVisible(true)]或[Flags]进行修饰,每次更改都会影响您的测试结果。

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

1

如果你想要进行苹果和苹果之间的比较,那么你应该添加 [ComVisible(true)] 属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接