【发布时间】:2009-12-23 07:27:32
【问题描述】:
快速的;我是否认为将字符串传递给“作为 CONST”的方法比将字符串作为“VAR”传递的开销更多?编译器会让Delphi制作一个字符串的副本然后传递副本,如果字符串参数被声明为一个CONST,对吧?
这个问题的原因有点乏味;我们有一个遗留的 Delphi 5 实用程序,它的日子已经数不胜数了(替代品正在开发中)。它进行了大量的字符串处理,经常在各种函数和过程之间传递 1-2Kb 的字符串。在整个代码中,一直坚持使用 CONST 或 VAR 传递参数(取决于手头的工作)的“正确”观察。我们只是在寻找一些“快速获胜”,可以将执行时间缩短几微秒,让我们渡过难关,直到新版本准备好。我们考虑将内存管理器从默认的 Delphi 5 更改为 FastMM,并且我们还想知道是否值得更改字符串的传递方式 - 因为代码在字符串作为 const 传递时工作正常,我们不如果我们将这些声明更改为 var,就会发现问题 - 该方法中的代码不会更改字符串。
但实际上真的会有什么不同吗? (该程序实际上只是对这些 1kb+ish 字符串进行了大量处理;高峰时间每分钟几百个字符串)。在重写时,这些字符串被保存在对象/类变量中,因此它们并没有真正以相同的方式被复制/传递,但在遗留代码中它非常“老派”帕斯卡。
当然,我们会分析程序的整体运行情况,看看我们有什么不同,但如果我们在第一个实例中字符串传递的工作方式绝对错误,那么实际尝试这个是没有意义的!
【问题讨论】: