[英]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.