C# 模式匹配比只检查对象中的标志要快得多!!?为什么?

C# 模式匹配比只检查对象中的标志要快得多!!?为什么?,c#,.net-core,C#,.net Core,我认为模式匹配要比在对象中有一个表明对象是类Foo实例的isFooObject标志慢得多。我错了 下面是我的实验的可运行代码,下面是我的代码: var obj1 = new Foo { Id = 123, Name = "12341", isFooObj = true }; var watch1 = Stopwatch.StartNew(); for(int i=0; i<100 000 000; i++) {

我认为模式匹配要比在对象中有一个表明对象是类
Foo
实例的
isFooObject
标志慢得多。我错了

下面是我的实验的可运行代码,下面是我的代码:

        var obj1 = new Foo { Id = 123, Name = "12341", isFooObj = true };
        var watch1 = Stopwatch.StartNew();
            for(int i=0; i<100 000 000; i++) {
                if (obj1.isFooObj) { // Do something }
            }
        watch1.Stop();
        
        var watch2 = Stopwatch.StartNew();
            for(int i=0; i<100 000 000; i++) {
                if(obj1 is Foo) { //Do something }
            }
        watch2.Stop();
var obj1=newfoo{Id=123,Name=“12341”,isFooObj=true};
var watch1=Stopwatch.StartNew();

对于(int i=0;i“整个对象”-类型元数据很容易被运行时访问并进行了高度优化。这里可能还涉及到一些编译器魔法,因为它可以在编译时确定
obj1
实际上是
Foo
所有1亿次的检查。事实上-考虑到
obj1
的类型是
Foo
,您是真实的只是说“值是否非空?”“整个对象”-类型元数据很容易被运行时访问并进行了高度优化。这里可能还涉及到一些编译器魔法,因为它可以在编译时确定
obj1
实际上是
Foo
所有1亿次的检查。事实上-考虑到
obj1
的类型是
Foo
,您是真实的只是说“值是否非空?”