F#类型提供程序构建速度非常慢

时间:2013-06-18 13:52:39

标签: .net f# type-providers

我正在使用Type Providers,特别是sql实体框架类型提供程序。 我正在针对具有大量对象的数据库编写测试,并且它是远程的,因此连接速度有点慢。每次构建项目都需要花费很多时间,构建完成需要几分钟。

我想知道为什么编译器不会缓存类型信息?

P.S。 使用F#interactive更糟糕的是......

3 个答案:

答案 0 :(得分:10)

尝试将DataSchemaFile属性用于数据提供程序。这指向用于生成类型的.csdl文件。您可以让类型提供程序通过将ForceUpdate属性设置为true来更新此文件。要从缓存模式运行,只需将ForceUpdate设置为false。以下是我使用SqlDataConnection提供程序执行此操作的方法,该提供程序与SqlEntityConnection提供程序非常相似。

type schema = SqlDataConnection< LocalSchemaFile = "Schema.dbml", ForceUpdate = false, ConnectionString = @"Data Source=<insert your connection string here>" >

答案 1 :(得分:0)

除了可以定义为'慢速构建'之外,(如果你处于红绿色tdd开发圈,构建很快变得很慢!),我将我的客户端类型提供程序代码移动到一个单独的项目中。我已经将ForceUpdate设置为false,但仍然构建很慢(显然仍然会对生成的dbml文件进行一些后台检查,实际上是wsdlschema文件)。

将所有类型提供程序代码移动到单独的项目后,构建速度明显加快!

注意:加载交互式的速度更快,只需要为类型添加对dll的引用

答案 2 :(得分:0)

好像瓶颈在远程连接中。我还假设您必须经常编辑和重新获得数据库访问代码。

某些类型的提供程序可以指向本地SQL脚本而不是实时连接,如果不是这种情况,则创建一个本地数据库,该数据库将复制模式(如果有的话,复制“枚举”表中的静态数据)。类型提供程序/编译器和运行时的连接不必相同。

有一些工具可以不时地同步模式,例如Red Gate SQL Compare(这是一个不错的选择,但不是免费的),或者只是重新生成完整的db模式SQL并重新创建本地数据库并偶尔运行一次(这也是可以自动化,但这是另外一回事了。