我正在爲使用ExcelDNA的Excel編寫一個F#加載項UDF,理想情況下我想根據另一個CSV的內容動態加載CSV。使用F#數據CSV類型提供者與CSV解析器和閱讀器之間的性能差異
我一直使用在下面的F#數據庫類型提供商和CSV解析器: http://fsharp.github.io/FSharp.Data/library/CsvProvider.html
類型供應商不會讓我傳遞一個變量來編譯時間之前一個字符串,因爲它不是靜態的(也許我做錯了什麼 - 請看下面的代碼不起作用)。
let getcontractperiod = new CsvProvider<"P:/Datastructures/contract_variables.csv", ",">()
let contractperiodfilelocation = getcontractperiod.Filter(fun row -> row.ContractModelID="MyContractTest").Data
let closescc = [| yield! contractperiodfilelocation |> Seq.map (fun x -> x.FileLocation) |]
let onstructure = new CsvProvider<closescc.[0], ",">()
無效的靜態參數來提供的類型。期望有一種「串」的論點。
但是,如果我使用CSV解析器從相同的庫它的作品(但我失去了強類型的提供方面)。
let getcontractperiod = new CsvProvider<"P:/Datastructures/contract_variables.csv", ",">()
let contractperiodfilelocation = getcontractperiod.Filter(fun row -> row.ContractModelID="MyContractTest").Data
let closescc = [| yield! contractperiodfilelocation |> Seq.map (fun x -> x.FileLocation) |]
let onstructure = CsvFile.Load(closescc.[0]).Cache()
我想知道的是:
由於這將在Excel中多次調用,是否會有一個顯著的性能損失使用CsvParse方法相對於CSV類型供應商,特別是當我需要在csvparse方法中轉換/轉換任何東西。
注意我需要爲每次計算加載大約4個csvs,csvs大約需要600-2000行。在這個階段,我沒有選擇去數據庫的選擇。
謝謝。
爲什麼不試試看看。另外,我認爲你的意思是其中一個代碼塊是不同的。 –
我不確定CSV類型提供程序是如何工作的,但是對於'SqlEntityConnection'(數據庫提供程序),它確實需要一個連接字符串來創建類型,但是您可以提供* different *連接字符串作爲參數創建上下文時。它效果很好,只要兩個數據庫是相同的。 CSV提供者沒有這種選擇嗎? –