我经常对此感到困惑.我一直被教导用经常使用变量或常量命名的数字,但如果它降低了程序的效率,我还应该这样做吗?下面是一个例子:
private int CenterText(Font font, PrintPageEventArgs e, string text)
{
int recieptCenter = 125;
int stringLength = Convert.ToInt32(e.Graphics.MeasureString(text, font));
return recieptCenter - stringLength / 2;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码使用的是命名变量,但运行速度比这段代码慢:
private int CenterText(Font font, PrintPageEventArgs e, string text)
{
return 125 - Convert.ToInt32(e.Graphics.MeasureString(text, font) / 2);
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,执行时间的差异是最小的,但是在更大的代码块中呢?
使用变量和硬编码值之间的差异在最坏情况下可以忽略不计.编译器很好地处理这样的事情.如果您发现性能有所不同,我希望了解您收集这些指标的方法.(您的测试本身可能是可疑的,并且很可能不可重复.)
无论如何,您首先应该担心程序的正确性和可维护性.这意味着:
125什么,它是什么意思?)此外,receiptCenter听起来不应该是一个常数.它可能不经常更改,但我建议您将它存储在您的应用程序之外的配置文件或数据库表等.如果该值需要更改,您必须重新编译并推动整个事情.另外,如果在receiptCenter的价值不同的其他地方发布您的软件呢?您只想更改配置设置,而不是仅为该实例构建不同版本的应用程序.
优化是您最不担心的事情,除非您首先要担心这是建筑师/专家级别的考虑因素.
当他们说"使用常数"时,他们的字面意思是"使用常量"; 它们并不意味着"使用永不改变的变量".
这相当于您的代码:
const int recieptCenter = 125;
int stringLength = Convert.ToInt32(e.Graphics.MeasureString(text, font));
return recieptCenter - stringLength / 2;
Run Code Online (Sandbox Code Playgroud)
使用const关键字,编译器知道它125永远不会改变,并且能够应用它将应用于表示为文字的常量的优化.
命名您的"神奇数字"有一个巨大的优势:在您离开公司后维护代码的人会知道它的含义是什么125.当您几年后重新访问此代码时,它也会对您有所帮助.
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |