F#项目需要花费很多时间来构建

时间:2015-09-24 07:23:29

标签: visual-studio-2013 build f#

我创建了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`

2 个答案:

答案 0 :(得分:4)

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

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

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

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

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

答案 1 :(得分:2)

This answer关于NGEN曾经帮助过我一次,但与C#相比,F#的构建时间仍然很糟糕,而不是几分钟。