2013-09-09 5 views
1

У меня есть следующий код. Это займет несколько минут, если я изменю линию where (row.SiteID = 1) на where (row.SiteID = 2). Я искал в Интернете и добавил LocalSchemaFile = "Schema.dbml", ForceUpdate = false для SqlDataConnection. Он по-прежнему занимает около 15 секунд каждый раз, когда условие запроса изменяется.Почему провайдер типа Sql очень медленный?

Update:
Если я повторно запустить код без изменения кода 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 
+0

уточнить: требуется 15 секунд для чего? – desco

+0

@desco Для 'printfn '% A" aRow' требуется 15 секунд. – ca9163d9

+0

, поэтому выполнение запроса занимает 15 секунд. На первый взгляд это похоже на то, что происходит на стороне базы данных и не имеет ничего общего с поставщиками типов. У вас есть те же результаты, если вы вызываете свою базу данных из C# или запускаете запрос с помощью Sql Management Studio? – desco

ответ

1

Вы пробовали выдавать отметку времени в начале основной функции? Возможно ли, что вы видите время компиляции, а не время запуска? Если вы не измените код и не нажмете F5, он просто запустит уже скомпилированную версию. Если вы настроите код, когда вы нажмете F5, его нужно будет перекомпилировать (и компиляция F # выглядит довольно медленной).

Если вы выведете временную метку в начале программы и после доступа к данным, возможно, вы увидите, что время выполнения так же быстро в обоих случаях.

+0

да, я думаю, что потребуется некоторое время для компиляции после изменения кода. – ca9163d9

Смежные вопросы