F# CsvProvider抛出OutOfMemoryException

F# CsvProvider抛出OutOfMemoryException,f#,f#-data,F#,F# Data,FAOCropsLivestock.csv包含超过1400万行。在我的.fs文件中,我声明 type FAO = CsvProvider<"c:\FAOCropsLivestock.csv"> 在这两种情况下,都会引发异常 在MSSQL服务器中加载csv文件后,我还尝试了以下代码 type Schema = SqlDataConnection<conStr> let db = Schema.GetDataContext() db.FAOCropsLivestock.Wh

FAOCropsLivestock.csv
包含超过1400万行。在我的
.fs
文件中,我声明

type FAO = CsvProvider<"c:\FAOCropsLivestock.csv">
在这两种情况下,都会引发异常

在MSSQL服务器中加载
csv
文件后,我还尝试了以下代码

type Schema = SqlDataConnection<conStr>
let db = Schema.GetDataContext()
db.FAOCropsLivestock.Where(fun x-> x.Country = country) |> ....
type Schema=SqlDataConnection
让db=Schema.GetDataContext()
db.FAOCropsLivestock.Where(乐趣x->x.Country=Country)|>。。。。
它起作用了。如果我使用
OleDb
连接发出
query
,它也可以工作,但速度很慢


如何使用
CsvProvider

如果您参阅的底部,您将看到关于处理大型数据集的一节。如上所述,您可以设置
CacheRows=false
,这将在处理大型数据集时为您提供帮助

type FAO = CsvProvider<"c:\FAOCropsLivestock.csv", CacheRows = false>

但是,您应该注意只枚举一次内容。

您是否尝试过创建一个小的
.csv
文档,例如,该大文件的前100行?这应该会给CSV提供程序一些可以使用的东西,而不会让它不知所措。我不知道它是否会工作,但它可能能够在以后解析真实的文件。。。值得一试,我想说……@MarkSeemann
CsvProvider
Skip
Take
函数这样做。。。但是它可能比OleDb要花费更多的时间。每次您尝试编译代码时,类型提供程序都会加载到示例文档中,并尝试从中推断类型。如果示例文档有1400万行,那么内存不足也就不足为奇了。如果你给它一个小样本,它实际上可能能够完成它的工作。例如,请看这个答案,它使用基本的F#IO功能在文本文件中写入和读取1000万行。我将在F#中应用你的技术。我之前在C#中使用了平面文件的
StreamReader
StreamWriter
。它比
OleDb
慢3倍,并对每一列进行了
DBNull.Value
测试。速度再慢也没关系!它适用于较小的代码。。。。谢谢
type FAO = CsvProvider<"c:\FAOCropsLivestock.csv", CacheRows = false>
FAO.GetSample().Rows |> Seq.filter (fun x -> x.Country = country) |> ....