【问题标题】:F# Type Providers very very slow buildF# 类型提供程序非常非常慢的构建
【发布时间】:2013-06-18 13:52:38
【问题描述】:

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

我错过了什么,为什么编译器不缓存类型信息?

附: 使用 F# 交互更糟糕......

【问题讨论】:

  • 您认为这很慢的基准是什么?你的比较点是什么?我的意思是,您是否尝试过针对不同后端的类型提供程序?投票结束,因为这是一个过于宽泛的问题。
  • 每次需要几分钟的构建时间太长了......我与其他构建相比。
  • 每次构建都需要几分钟?我曾经在一个商业 C++ 应用程序上工作,每次我们构建它都需要 1/2 小时来构建它——这是经过几轮优化之后的。除非您每次都在构建玩具代码,否则编译将需要一些时间。说“它太慢了”有点像最终用户说“它太难使用”——含糊而毫无用处。
  • 我有一个源文件,它包含 9 行。每次我编译时,编译器都会重建类型提供者背后的整个“魔法”,而且确实需要很长时间。
  • 问得好,可能有些人从未听说过 tdd?并且仍然四处将打孔卡送入他们的计算机;-) 快速构建和能够运行快速测试轮非常重要!

标签: .net f# type-providers


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    除了可以定义为“缓慢构建”的内容(如果您在红绿 tdd 开发圈中,构建速度很快就会变慢!),我将客户端类型提供程序代码移到了一个单独的项目中。我已经将 ForceUpdate 设置为 false,但构建仍然很慢(显然仍在对生成的 dbml 文件进行一些后台检查,在我的情况下实际上是 wsdlschema 文件)。

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

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

    【讨论】:

      【解决方案3】:

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

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

      有一些工具可以偶尔同步模式,例如 Red Gate SQL 比较(这是一个很棒但不是免费的),或者只是重新生成完整的数据库模式 SQL 并重新创建本地数据库并偶尔运行一次(这也是可以自动化,但情况不同)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-28
        • 2014-06-02
        • 2017-04-17
        • 1970-01-01
        • 2014-09-02
        • 2022-01-12
        • 2015-05-22
        • 1970-01-01
        相关资源
        最近更新 更多