Delphi中"以子串开始"技术的效率?

Jes*_*own 6 delphi performance

这两种方法的性能如何确定字符串是否以Delphi中的某个子字符串开头比较?一个比另一个明显更快/更有效吗?

  if ((testString[1] = '=') AND (testString[2] = '?')) then ...
Run Code Online (Sandbox Code Playgroud)

  if (AnsiStartsStr('=?', testString)) then ...
Run Code Online (Sandbox Code Playgroud)

Mas*_*ler 8

那么,第一个肯定会更快.解决硬编码,高度特定的问题几乎总是比将特定解决方案传递给一般问题解决例程快得多.至于"显着"更快,你为什么不测试它?在循环中运行两个版本1000万次并使用TStopwatch(或者如果你没有D2010或更高版本的其他东西)来计时.

另一件事:第一个肯定更快,但也可能是错误的.如果length(TestString)不保证> = 2,则此处可能出现错误情况.如果TestString是空字符串,则会引发异常.如果没有,您可能会或可能不会获得异常,具体取决于编译器设置.

  • 好点子.第一个并不总是安全的.它至少需要`if Length(testString)> = 2)和......` (2认同)