簡體   English   中英

F#項目花費大量時間來構建

[英]F# project is taking so much time to build

我創建了f#解決方案,並添加了一個類庫。 解決方案中只有一個項目,每個文件中有5個文件和20行代碼。 每次構建仍需要2分鍾以上的時間。

我試圖清潔溶液。 還創建了新的解決方案和項目,並包含相同的文件,但是仍然需要花費相同的時間來構建它。

注意 :首先,我將其創建為控制台應用程序,然后將其轉換為類庫。

編輯:代碼示例

打開系統打開配置打開DBUtil打開定義

模塊DBAccess =

let GetSeq (sql: string) =
      let db = dbSchema.GetDataContext(connectionString)  
      db.DataContext.CommandTimeout <- 0                        
      (db.DataContext.ExecuteQuery(sql,""))


let GetEmployeeByID (id: EMP_PersonalEmpID) = 
    GetSeq (String.Format("EXEC [EMP_GetEntityById] {0}",id.EmployeeID)) |> Seq.toList<EMP_PersonalOutput>

let GetEmployeeListByIDs (id : Emp_PersonalInput) = 
    GetSeq (String.Format("EXEC [EMP_GetEntityById] {0}",id.EmployeeID)) |> Seq.toList<EMP_PersonalOutput>`

配置代碼段:`open Microsoft.FSharp.Data.TypeProviders

模塊配置= let connectionString = System.Configuration.ConfigurationManager.ConnectionStrings。[“ EmpPersonal”]。ConnectionString

//for database,then stored procedure, the getting the context,then taking the employee table
type dbSchema =  SqlDataConnection<"", "EmpPersonal">
//let db = dbSchema.GetDataContext(connectionString)

type tbEmpPersonal = dbSchema.ServiceTypes.EMP_Personal`

好的,看到您的實際代碼,我認為主要的問題是類型提供程序每次都連接到數據庫以檢索架構。 解決此問題的方法是將模式緩存在dbml文件中。

type dbSchema = SqlDataConnection<"connection string...",
                                  LocalSchemaFile = "myDb.dbml",
                                  ForceUpdate = false>

TP會像往常一樣第一次連接到數據庫,但也會將架構寫入myDb.dbml 在后續編譯中,它將從myDb.dbml加載架構,而不是連接到數據庫。

當然,這種緩存意味着對數據庫的更改不會反映在類型中。 因此,每次需要從數據庫重新加載架構時,都可以將ForceUpdate設置為true ,進行編譯(將連接到db),然后將其設置為false以使用更新的myDb.dbml

編輯:如果需要,您甚至可以將dbml文件提交到源存儲庫。 這將帶來額外的好處,使無法訪問數據庫開發版本的協作者無論如何都可以編譯解決方案。

關於NGEN的答案曾經幫助過我一次,但是與C#相比,F#的構建時間仍然很糟糕,而不僅僅是幾分鍾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM