gpt4 book ai didi

f# - 仅在 F# Interactive 中声明变量需要 300 毫秒?

转载 作者:行者123 更新时间:2023-12-04 23:59:52 25 4
gpt4 key购买 nike

我正在使用 F# Interactive Console 并比较一些数字操作的运行时间。在这段代码中,总运行时间似乎翻了一番,只是重复了一个变量的声明。

在 VS 2010 中,我这样做:

open System.Diagnostics
let mutable a=1

然后我在下面选择它并使用 Alt+Enter 运行它
let stopWatch = Stopwatch.StartNew()
for i=1 to 200100100 do
a <- a + 1
stopWatch.Stop()
printfn "stopWatch.Elapsed: %f" stopWatch.Elapsed.TotalMilliseconds

它需要或多或少:320 ms

现在我选择它并按 Alt+Enter:
let mutable a=1
let stopWatch = Stopwatch.StartNew()
for i=1 to 200100100 do
a <- a + 1
stopWatch.Stop()
printfn "stopWatch.Elapsed: %f" stopWatch.Elapsed.TotalMilliseconds

几乎翻倍:620 毫秒

相同的 block ,但包括顶部的声明几乎需要两倍。因为我在 Stopwatch.StartNew() 之前声明了变量,所以不应该是一样的吗?这与交互式控制台有关吗?
我使用#time 指令得到了相同的结果。

最佳答案

我不相信任何答案都是正确的。我认为 a在两种情况下都表示相同。我的意思是动态地发出一个单独的类型来包装该可变值(当然是在堆上!)。它需要这样做,因为在这两种情况下,a是可以被后续交互访问的顶级绑定(bind)。

综上所述,我的理论是:在第一种情况下,FSI 发出的动态类型在交互结束时加载,以便输出其默认值。然而,在第二种情况下,类型包装 a直到第一次被访问,在循环中,在 StopWatch 之后才加载。开始了。

关于f# - 仅在 F# Interactive 中声明变量需要 300 毫秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com