Vb.net SqlBulkCopy速度测试
我正在使用vb.net将excel文件中的一些数据导入sql数据库。我正在使用SqlBulkCopy来执行此操作。我测试了该方法的速度,发现当specify BatchSize=300时,如果我根本不指定BatchSize,速度会慢2秒。这可能吗?我认为指定的批量会更快,因为与数据库的通信更少Vb.net SqlBulkCopy速度测试,vb.net,Vb.net,我正在使用vb.net将excel文件中的一些数据导入sql数据库。我正在使用SqlBulkCopy来执行此操作。我测试了该方法的速度,发现当specify BatchSize=300时,如果我根本不指定BatchSize,速度会慢2秒。这可能吗?我认为指定的批量会更快,因为与数据库的通信更少 Dim xlapp As Excel.Application Dim xlworkbook As Excel.Workbook Dim xlworksheet As Excel.Works
Dim xlapp As Excel.Application
Dim xlworkbook As Excel.Workbook
Dim xlworksheet As Excel.Worksheet
Dim newCulture As System.Globalization.CultureInfo
Dim OldCulture As System.Globalization.CultureInfo
xlapp = New Excel.Application
OldCulture = System.Threading.Thread.CurrentThread.CurrentCulture
newCulture = New System.Globalization.CultureInfo(xlapp.LanguageSettings.LanguageID(Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDUI))
System.Threading.Thread.CurrentThread.CurrentCulture = newCulture
xlworkbook = xlapp.Workbooks.Open("E:\KREZA\petrovac.xls")
xlworksheet = xlworkbook.Worksheets(1)
Dim tabela As DataTable
tabela = New DataTable
For i As Integer = 1 To 4
tabela.Columns.Add(New DataColumn())
Next
For i As Integer = 1 To xlworksheet.UsedRange.Rows.Count
tabela.Rows.Add(CInt(xlworksheet.Cells(i, 4).value.ToString), xlworksheet.Cells(i, 2).value.ToString, CInt(xlworksheet.Cells(i, 9).value.ToString), CDbl(Microsoft.VisualBasic.Left(xlworksheet.Cells(i, 5).value.ToString, Len(xlworksheet.Cells(i, 5).value.ToString) - 3)))
Next
xlworkbook.Close()
xlapp.Quit()
cnparfimerija.Open()
Using copy As New SqlBulkCopy(cnparfimerija)
copy.ColumnMappings.Add(0, 1)
copy.ColumnMappings.Add(1, 2)
copy.ColumnMappings.Add(2, 3)
copy.ColumnMappings.Add(3, 4)
copy.DestinationTableName = "ArtikliPetrovac"
copy.BatchSize = 300
copy.WriteToServer(tabela)
End Using
cnparfimerija.Close()
MessageBox.Show("Uspesno")
这取决于您的数据库和行数,我想我也遇到了类似的问题,但我每次都有1行以上的行导入到数据库,所以我发送了4000的最佳批处理大小。增加和减少会导致系统减慢复制过程。这些事情总是一个平衡的过程。更改批次大小会改变流程的多个方面。有些事情可能会提高效率,有些事情可能会降低效率。