首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带参数调用类时的C#反射性能比较

带参数调用类时的C#反射性能比较
EN

Stack Overflow用户
提问于 2020-04-03 01:09:12
回答 1查看 176关注 0票数 0

我听说过很多关于Linq表达式性能的事情。但我没办法亲自检查。请看下一个.NET核心应用示例:

代码语言:javascript
运行
复制
 class Program
    {
        static void Main(string[] args)
        {
            var classType = Type.GetType("ConsoleApp1.TestClass");
            var classConstructor = classType.GetConstructor(new[] { typeof(string) });

            //var param = Expression.Parameter(typeof(string));
            //var newExpression = Expression.New(classConstructor, param);
            //LambdaExpression lambda = Expression.Lambda(newExpression, param);
            //var compiled = lambda.Compile();
            //var instance = compiled.DynamicInvoke("test");

            //var instance = Activator.CreateInstance(classType, "test");

            //var instance = classConstructor.Invoke(new object[] { "test" });

            Console.ReadLine();
        }
    }

    class TestClass
    {
        public TestClass(string param)
        {

        }
    }

当我使用未注释的表达式版本运行此代码时,代码的运行速度会慢10倍。请告诉我哪里可能是错误的,或者它是如预期的。

EN

回答 1

Stack Overflow用户

发布于 2020-04-03 02:03:03

一个简单的基准测试显示了有趣的结果。持续时间以毫秒为单位。

我只想分享我得到的结果。看起来DynamicInvoke真的有很大的开销(正如@ivan-stoev指出的那样)

我将添加具有强类型lambda的.Invoke解决方案和实现简单实例化接口的Roslyn编译的具体类的结果。

ConstructorInfo被缓存,编译后的lambda表达式也被缓存。

对于每个1000万次迭代:(每个方法有1亿次实例化)

代码语言:javascript
运行
复制
---------------------------------------------------------------------------
Benchmark Results:
---------------------------------------------------------------------------
                    Activator           Constructor         Compiled Lambda
---------------------------------------------------------------------------

Totals :            8121.2488           3067.6226           9353.8141


Average:            0.00081212488       0.00030676226       0.00093538141


Maximum:            922.5987            450.7662            1046.3734


Minimum:            0                   0                   0


---------------------------------------------------------------------------
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60997173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档