首页 新闻 会员 周边

用常量来表示一些字符串或数字是否有助于性能提升

0
悬赏园豆:20 [已解决问题] 解决于 2013-06-06 09:15
//代码段1
throw new Exception("没有查询到记录。");


//代码段2
const string ExceptionMessage="没有查询到记录。";
throw new Exception(ExceptionMessage);


//代码段3
ComOutput.SetComOutput(1);


//代码段4
const int One = 1;
ComOutput.SetComOutput(One );

像这样的字符串"没有查询到记录。"或1全部用常量来表示,是不是有助于性能提升?谢谢各位指教,不胜感激

美国国父爱泼斯坦的主页 美国国父爱泼斯坦 | 初学一级 | 园豆:152
提问于:2013-06-01 17:33
< >
分享
最佳答案
0

代码1和代码2,代码3和代码4没有任何区别。C#编译器在对于const常量会展开到具体调用的地方的,和c里面的宏常量类似。

直接写成数字和字符串的行为是称为魔鬼数字的,可读性和维护性较差,对于项目来说是不提倡的。

收获园豆:10
天方 | 大侠五级 |园豆:5407 | 2013-06-02 21:58

只是可读性和维护性的差别,在性能上是没有区分的,是不是?

美国国父爱泼斯坦 | 园豆:152 (初学一级) | 2013-06-03 14:10

@ddxkj: 

你反编译看看就知道了。代码2和代码4的反编译结果应该就是代码1和代码3。也就是说,编译后是等价的,性能自然没有区别。

天方 | 园豆:5407 (大侠五级) | 2013-06-03 22:48

@天方: 常量是放在元数据中,不在内存,而变量是在内存中,性能怎么会是一样,不解

美国国父爱泼斯坦 | 园豆:152 (初学一级) | 2013-06-05 08:51
其他回答(2)
0

如果编译器没针对你的代码优化的话, 绝对有

收获园豆:2
悟了 | 园豆:521 (小虾三级) | 2013-06-01 17:42
0

答案:一般情况const得确有助性能提升。

解释:C#编译器编译的时候会将常量直接保存到程序集元数据中,这样在运行时无需为常量分配内存,而是直接从元数据中读取。

弊端:常量的优点同时也带来了一个弊端,当我们的项目很大时,需要分布到多个程序集,当我们业务需要改变一个程序集中常量数值的时候,我们修改完程序集中常量,编译的时候需要整个项目整体再编译一次,修改后的常量才会生效。

收获园豆:8
Aaron.Pan | 园豆:226 (菜鸟二级) | 2013-06-02 04:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册