1

我有以下代码。如果我将线路更改where (row.SiteID = 1)where (row.SiteID = 2). 我在网上搜索并添加LocalSchemaFile = "Schema.dbml", ForceUpdate = falseSqlDataConnection. 每次更改查询条件时,仍然需要大约 15 秒。

更新:
如果我在不更改 Linq 代码的情况下重新运行代码,它将立即从数据库表中获取并打印该行。

open System
open System.Data
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Microsoft.FSharp.Linq
open System.Net
open System.IO
open FSharp.Data

type dbSchema = SqlDataConnection<"Data Source=Svr;Initial Catalog=DB;Integrated Security=SSPI;"> 
//, LocalSchemaFile = "Schema.dbml", ForceUpdate = false > // Still take 15 secs
let getARow =
    let db = dbSchema.GetDataContext()
    db.DataContext.Log <- System.Console.Out
    let query = query { 
        for row in db.Table1 do 
        where (row.SiteID = 1) 
        select (Some(row.Col1, row.Col2))
        headOrDefault
        }
    query 

[<EntryPoint>]
let main argv = 
    let aRow = getARow
    printfn "%A" aRow 
    0
4

1 回答 1

1

您是否尝试过在主函数开始时输出时间戳?您是否有可能看到编译时间,而不是运行时间?如果您不更改代码并按 F5,它将仅运行已编译的版本。如果你调整代码,当你按下 F5 时,它需要重新编译(编译 F# 似乎很慢)。

如果您在程序开始时和数据访问之后输出时间戳,您可能会看到运行时在这两种情况下都一样快。

于 2013-10-27T15:15:06.053 回答