F# 项目花费了太多时间来构建

Rav*_*are 2 f# build visual-studio-2013

我创建了 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>`
Run Code Online (Sandbox Code Playgroud)

配置代码片段:`打开 Microsoft.FSharp.Data.TypeProviders

module Configuration = 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`
Run Code Online (Sandbox Code Playgroud)

Tar*_*mil 5

好的,看到您的实际代码,我认为主要问题是类型提供程序每次都连接到数据库以检索架构。解决此问题的方法是将架构缓存在 dbml 文件中。

type dbSchema = SqlDataConnection<"connection string...",
                                  LocalSchemaFile = "myDb.dbml",
                                  ForceUpdate = false>
Run Code Online (Sandbox Code Playgroud)

第一次,TP 会像往常一样连接到数据库,但它也会将架构写入myDb.dbml. 在随后的编译中,它将从myDb.dbml不是连接到数据库。

当然,这种缓存意味着对数据库的更改不会反映在类型中。因此,每次您需要从数据库重新加载架构时,您都可以设置ForceUpdatetrue,进行编译(将连接到数据库),然后将其设置回false以使用更新的myDb.dbml.

编辑:dbml如果需要,您甚至可以将文件提交到源存储库。这将具有额外的好处,允许无权访问数据库开发版本的协作者无论如何都可以编译解决方案。