在 Visual Studio 2012 中,为什么这段代码在交互模式下执行得如此之快,而在作为控制台应用程序运行时却如此缓慢?我有一台速度很快的计算机,但在运行时功能完成之前我可以数到 4,甚至在交互式工作室窗口中也不能数到 1。
让我感到厌烦的另一部分是,当我为 Project Euler #4 测试其他人的 F# 代码时,它们都运行良好。所以这让我相信这段代码有一些不是最优的。(而且它也很整洁>:P)
let reverse(digits:string) =
digits.ToCharArray() |> Array.rev |> System.String.Concat
let isPalindrome(number:int) =
let text = number.ToString()
if text.Length % 2 = 0 then
text = reverse(text)
else
false
let palindromes(floor:int, ceiling:int) =
seq {
for i1 = floor to ceiling do
for i2 = floor to ceiling do
let result = i1 * i2
if isPalindrome result then
yield result
}
let run =
palindromes(100, 999)
|> Seq.max
概括
为了后代,我将列出最有效的性能变化。
- 删除 Concat 并创建一个新字符串。
- 只保留最大的回文而不是收集所有回文
- 用计算反向替换字符串版本的反向
它仍然没有解释我原来的问题。但现在它是如此微不足道,很难说服自己再花时间在上面。我感谢大家的意见。谢谢!