Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 哪一个对性能最好?_C#_.net_Performance - Fatal编程技术网

C# 哪一个对性能最好?

C# 哪一个对性能最好?,c#,.net,performance,C#,.net,Performance,以下哪一个代码段执行得最快 if(ClassTestBase is ClassTestChild1) 或 更新: 以下是完整的场景: public enum EInheritanceTree { BaseClass, Child1, Child2, Child3 } public class MyBaseClass { public virtual EInheritanceTree MyClassType { get

以下哪一个代码段执行得最快

if(ClassTestBase is ClassTestChild1)

更新: 以下是完整的场景:

public enum EInheritanceTree
{
    BaseClass,
    Child1,
    Child2,
    Child3
}

public class MyBaseClass
{
    public virtual EInheritanceTree MyClassType
    {
         get
         {
              return EInheritanceTree.BaseClass;
         }
    }
}

public vlasse MyChildClass1 : MyBaseClass
{
    public override EInheritanceTree MyClassType
    {
        get
        {
            return EInheritanceTree.Child1;
        }
    }
}
考虑一个方法,该方法必须比较类类型以查看它是什么类型。哪一个是最好的

public bool IsChild1(MyBaseClass myClass)
{
     if(myClass is MyChildClass1)
          return true;

     return false;
}


如果您担心性能,请不要将所有这些都封装在函数中。任何说明:

if (Obj.IsChild1() ) foo; if(Obj.IsChild1())foo; 我们应该做到:

if(myClass.MyClassType == EInheritanceTree.Child1) foo; 如果(myClass.MyClassType==EInheritanceTree.Child1)foo; 如果您担心性能,那么您可能有任何想法认为要隐藏函数背后的所有内容,都需要重新审视。另外,为什么不使用多态性呢?这是使子类行为不同的“正确”方法


无论如何,做一些你自己的时间安排。这是确定哪个更快的唯一方法。

您是否考虑过使用探查器来测试哪个性能更好?VisualStudio附带了一个分析器


我更关心的是是否需要一个枚举来保存应用程序的继承信息。

由于这两段代码的想法不同,我不认为比较它们的性能有什么好处。因为标题不好,缺少标记指示平台,所以被否决,事实上,这两段代码做的事情完全不同。这是一个微观优化。一般来说,如果您的程序能够从这些微优化中受益,那么您将知道如何找出性能最佳的;-)不要认为第二行可以编译。如果试图将子类型与基类型进行比较,则结果将始终为false。这两行代码使用得很独特,没有必要比较它们的性能。哇,我希望这些注释都不是来自那些不相信注释的人,“因为代码应该是自解释的”。也就是说,我确实从最初比较的两行中理解了这个问题;-)此外,如果他担心这种性能,那么c#可能是错误的语言,因为托管语言比非托管语言的开销更大。@Mattias Jakobson-同意。但是有时你会因为其他原因而被一种语言困住。-1:方法调用不一定要花费任何费用,因为编译器可能会内联一个方法的副本。除非您有探查器数据确认这是一个问题,否则您不应该这样做。@JørgenFogh-您评论中的关键词是“不一定”和“可能”。我主张您不应该使用这些函数,除非您已经验证它们不会影响性能。我在回答中确实说过要把握时机。我还用“如果你担心性能”来限定整个答案。@phkaler:根据你的推理,我应该提前支付成本(在程序员时间内),除非我能证明我没有得到回报(在计算机时间内)。这对我来说没有意义。代码应该被编写成可读的,然后在必要时进行优化。他可能想省略调用以使代码更具可读性,但每当您无正当理由损坏代码时,您就会遇到麻烦。 if (Obj.IsChild1() ) foo; if(myClass.MyClassType == EInheritanceTree.Child1) foo;