//代码段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全部用常量来表示,是不是有助于性能提升?谢谢各位指教,不胜感激
代码1和代码2,代码3和代码4没有任何区别。C#编译器在对于const常量会展开到具体调用的地方的,和c里面的宏常量类似。
直接写成数字和字符串的行为是称为魔鬼数字的,可读性和维护性较差,对于项目来说是不提倡的。
只是可读性和维护性的差别,在性能上是没有区分的,是不是?
@ddxkj:
你反编译看看就知道了。代码2和代码4的反编译结果应该就是代码1和代码3。也就是说,编译后是等价的,性能自然没有区别。
@天方: 常量是放在元数据中,不在内存,而变量是在内存中,性能怎么会是一样,不解
如果编译器没针对你的代码优化的话, 绝对有
答案:一般情况const得确有助性能提升。
解释:C#编译器编译的时候会将常量直接保存到程序集元数据中,这样在运行时无需为常量分配内存,而是直接从元数据中读取。
弊端:常量的优点同时也带来了一个弊端,当我们的项目很大时,需要分布到多个程序集,当我们业务需要改变一个程序集中常量数值的时候,我们修改完程序集中常量,编译的时候需要整个项目整体再编译一次,修改后的常量才会生效。