回 帖 发 新 帖 刷新版面

主题:如何避免反射带来的性能损失?

Type ty = test3.GetType();

            PropertyInfo info = ty.GetProperty("Name");

            for (int i = 0; i < 800000; i++)
             
                info.SetValue(test3, "abc",null);
            Console.WriteLine("reflect time=" + ((DateTime.Now.Ticks - time) / TimeSpan.TicksPerMillisecond));


类似的这么一段代码,在java上只需要500ms,
用c#,却要几分钟。

有什么办法可以变通一下,减少反射带来的性能损失呢?

回复列表 (共5个回复)

沙发

第一次运行都会需要花费一段时间,之后在运行就非常快了。因为第一次有一个编译的消耗。

板凳

怎么算第一次?

我在vs2005中,按地一下F5是第一次?按第二下是第二次?

3 楼

进行编译之后,第一次执行程序,第二次执行程序……

4 楼

第二次也很慢。

主要是,我写了段代码,从一个字符串动态的装配一个类。
功能类似XmlSerializer
但是性能远远不如XmlSerializer!
主要就是损耗在反射上了。。

5 楼

肯定是很慢的,因为当你编译成.EXE文件后,生成的是MSIL中间件,第一次执行时会由JIT编译器重新解释,第二次则不需这个过程,所以只是启动程序快了,程序跑起来后没什么差别.
故楼上几个的回案跟你的问题根本是两码事.
当然,你问的问题俺要研究下^_^

我来回复

您尚未登录,请登录后再回复。点此登录或注册