csv 类型提供程序中的缓存有什么用?

What's the use of cache in csv type provider?

我对 CacheCacheRows 有点困惑。

似乎MyCsvType.Load(path).Take(30000).Cache()实际上并没有立即读取30000行。 (不同于 Seq.cache

那么,既然我们已经 CacheRows

为什么还需要 Cache

此外,如果我只对前 30000 行感兴趣,我应该使用 MyCsvType.Load(path).Take(30000) 还是 MyCsvType.Load(path).Rows |> Seq.take 30000

如果你看一下F#数据源码,可以看到CacheTake等运算符只是在背后调用了相应的Seq.xyz操作(这是in CsvRuntime.fs).

主要区别在于,当您创建类型提供程序而未指定 CacheRows=false 时,默认情况下它实际上会调用 Cache。因此,诀窍是使用 CacheRows=false 创建类型提供程序,然后您可以交替使用 Seq.cacheCache 方法(以及其他操作)。

let stocks = CsvProvider<"sample.csv", CacheRows=false>.GetSample()
stocks.Take(10).Cache()             // Using methods is now exactly
stocks |> Seq.take 10 |> Seq.cache  // the same as using functions