今天扩展一个Type的扩展方法New:

        public static object New(this Type type, params object[] args)
{
Guard.ArgumentNull(type, "type");
return Activator.CreateInstance(type, args);
}

然后想到了测试一下其性能,所以就和直接使用Activator.CreateInstance方法作一下比较:

        public void TestCreateInstance()
{
Console.WriteLine(TimeWatcher.Watch(() =>
{
for (var i = ; i < ; i++)
{
var o = Activator.CreateInstance(typeof(TestSerializeClass1));
}
}));
Console.WriteLine(TimeWatcher.Watch(() =>
{
for (var i = ; i < ; i++)
{
var o = typeof(TestSerializeClass1).New();
}
}));
}

这似乎是多此一举的无用测试,却着实使我大吃一惊!

00:00:00.0015076
00:00:00.0104130
 
为什么发生了如此大的变化,不就是没有指定第二个参数么!!
使用Reflector查看Activator.CreateInstance(Type type) 和 Activator.CreateInstance(Type type, params object[] args) 方法,发现它们的实现都不一样,但具体慢在什么地方,暂时还没有时间去分析。
因此,在写公共类库的时候,性能测试是必须的,尤其是使用反射的情况下,更是要注意这样的陷阱。
 
修改后的New方法如下:
        public static object New(this Type type, params object[] args)
{
Guard.ArgumentNull(type, "type");
if (args == null || args.Length == )
{
return Activator.CreateInstance(type);
} return Activator.CreateInstance(type, args);
}

再次测试的时间如下:

00:00:00.0016531
00:00:00.0020176
 
但还是有一点点的影响,不过比起之前已经可以忽略不计了。

注意Activator.CreateInstance两个重载方法的性能的更多相关文章

  1. C# 页面向controller中跳转匹配方法的时候,当controller中有两个重载方法时候,不发生跳转

    在ajax中的URL跳向controller一个方法时候,controller中有两个重载的方法,ajax不发生跳转,当删除另外一个方法之后,正常跳转. 不知道,是我自己写的有问题,还是control ...

  2. FastMethod和PropertyUtils两种反射方法的性能比较

    这两个类都提供反射方法的实现,性能对比如下: 循环条件是:1亿次 结论:PropertyUtils提供的getXXX和setXXX反射方法的性能是FastMethod的三倍 以下是测试方法: 首先是F ...

  3. jedis set 的四个重载方法(byte[]的四个自动忽略)

    方法定义如下: 1.String set(String key, String value) 2.String set(String key, String value, String nxxx) 3 ...

  4. C# Activator.CreateInstance()方法使用

    C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...

  5. 关于Assembly.CreateInstance()与Activator.CreateInstance()方法

    于Assembly.CreateInstance()与Activator.CreateInstance()方法 动 态创建类对象,大多是Activator.CreateInstance()和Activ ...

  6. (转) C# Activator.CreateInstance()方法使用

    C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...

  7. C#中Activator.CreateInstance()方法用法分析

    本文实例讲述了C#中Activator.CreateInstance()方法用法. Activator 类 包含特定的方法,用以在本地或从远程创建对象类型,或获取对现有远程对象的引用. C#在类工厂中 ...

  8. Activator.CreateInstance 方法 (Type) 的用法

    转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) ...

  9. EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真

    EF Core使用SQL调用返回其他类型的查询   假设你想要 SQL 本身编写,而不使用 LINQ. 需要运行 SQL 查询中返回实体对象之外的内容. 在 EF Core 中,执行该操作的另一种方法 ...

随机推荐

  1. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  2. springMVC乱码问题-转

    彻底解决Spring MVC 中文乱码 问题     1:表单提交controller获得中文参数后乱码解决方案 注意:  jsp页面编码设置为UTF-8 form表单提交方式为必须为post,get ...

  3. Linux内核启动分析过程-《Linux内核分析》week3作业

    环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...

  4. 匿名管道读取CMD回显信息

    之前用了很坑爹的做法去读取了cmd命令的回显信息,现在发现了用匿名管道的实现方法,由于楼主没有学过Windows核心编程,找了一个代码来凑数 存下来以后研究 #include <windows. ...

  5. HTML常用命名和CSS reset代码【收集总结】

    CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...

  6. Python:如何显示进度条

    首先,推荐一个组件:progressive 效果如下: 进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过std ...

  7. android:style.xml

    <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2006 The Andr ...

  8. 如何做一份能忽悠投资人的PPT

    游侠近日发布的一款电动汽车引发全民吐槽,被人们嘲讽为“靠一份PPT忽悠投资人”.这类情形可以回溯至去年的锤子手机发布会.如今,吐槽的开始散去,我们可以静下心来吸收点干货,我们对比了锤子手机发布会的PP ...

  9. Nagios 安装配置

    ##Debian 6 安装server # apt-get install nagios* 一路设置好各种密码,成功后访问 http://ip/nagios3 既可,默认用户*nagiosadmin* ...

  10. 通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 解析办法

    EasyRadius提示:通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 出现以上问题,和easyradius没有直接的联系,主要产生原因有两种可能: 可能1:easyr ...