У меня есть следующий код. Это займет несколько минут, если я изменю линию 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
уточнить: требуется 15 секунд для чего? – desco
@desco Для 'printfn '% A" aRow' требуется 15 секунд. – ca9163d9
, поэтому выполнение запроса занимает 15 секунд. На первый взгляд это похоже на то, что происходит на стороне базы данных и не имеет ничего общего с поставщиками типов. У вас есть те же результаты, если вы вызываете свою базу данных из C# или запускаете запрос с помощью Sql Management Studio? – desco