Я использую поставщиков типа FSharp.Data.SqlClient
для доступа к базе данных SQL-сервера. Итак, я настроил типы в F# следующим образом:
type ClmDB = SqlProgrammabilityProvider<ClmSqlProviderName, ConfigFile = AppConfigFile>
type ResultDataTable = ClmDB.dbo.Tables.ResultData
type ResultDataTableRow = ResultDataTable.Row
а затем я использую его примерно так:
let saveResultData (r : ResultData) (conn : SqlConnection) =
let t = new ResultDataTable()
let newRow = r.addRow t
t.Update(conn) |> ignore
newRow.resultDataId
где ResultData
— некоторый тип, который «знает», как преобразовать себя в строку ResultDataTable
(ResultDataTableRow
). Расширение r.addRow t
делает это.
Все отлично, за исключением того, что строка, которую я вставляю, может быть довольно большой (размером 25-30 МБ), и поэтому у меня плохое предчувствие, что t.Update(conn)
может случайно истечь, особенно из-за почти 100% загрузки процессора (вычислительная система ядро предназначено для потребления всех ресурсов обработки, хотя и с низким приоритетом). Наведение курсора на t.Update
не показывает никакого способа указать время ожидания, и любое время ожидания на уровне соединения связано, ну, с соединением, а не с транзакцией вставки ☹.
Итак, вопрос в том, как указать тайм-аут для транзакции Update
.
Большое спасибо!
Обновление 20190116. Пока t.Update(conn)
выше работает без тайм-аутов на моем компьютере при вставке строк данных размером 95 МБ на 100 % ниже нормальной нагрузки некоторых других вещей, работающих там. Я еще не измерял фактическое время для таких транзакций. Если я это сделаю, я обновлю это.
Update
не установлено :( - person Konstantin Konstantinov   schedule 09.01.2019