我创建了一个VB.Net应用程序,它将从excel文件读取并将数据放入表中。 我使用了一张excel表,它有3列和65000行。 在开始阅读excel之前,我的机器的CPU使用率约为15%,但在读取期间,CPU使用率会上升至95%。 我不知道为什么会这样?有人可以在这个问题上帮助我吗? 以下是我写的代码:
Private Sub readFromExcel(ByVal fileName As String, ByVal sheetName As String)
Dim connString As String = "data source=XE; user=test; password=test"
Dim con As New OracleConnection(connString)
Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
xlApp = New Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Open(fileName)
xlWorkSheet = xlWorkBook.Worksheets(sheetName)
Dim x As Integer
Dim y As Integer
Dim i As Integer
x = xlWorkSheet.Rows.Count()
y = xlWorkSheet.Columns.Count()
Try
For i = 1 To x - 1
'MsgBox(xlWorkSheet.Cells(i, 0).value)
str1 = xlWorkSheet.Cells(i, 1).value
str2 = xlWorkSheet.Cells(i, 2).value
str3 = xlWorkSheet.Cells(i, 3).value
insertData()
Next
Catch ex As Exception
MsgBox(ex.Message())
Finally
con.Close()
xlWorkBook.Close()
End Try
End Sub
Private Sub insertData()
Dim str As String
str = "insert into test_import values('" + str1 + "'," + str2 + "," + str3 + ")"
Dim cmd As New OracleCommand()
cmd.CommandText = str
cmd.Connection = con
cmd.ExecuteNonQuery()
End Sub
提前thx。
答案 0 :(得分:4)
这是完全正常的。只有的程序才会在I / O陷入困境时烧掉100%的核心。从磁盘或网卡读取,在操作系统提供数据时阻止程序。你的代码不会像那样陷入困境,你要求它做一堆工作。逐个获得195,000个单元格值只需要一段时间。 Excel是一个进程外COM服务器,因此每个单元读取都需要两个CPU上下文切换。您可以使用Range来优化它。或者在具有双核CPU的机器上运行它,因此它最多只能射击50%。
功能,而不是错误。
答案 1 :(得分:3)
将195000个单元格一次性读入Object数组然后循环对象数组要快得多。 (对Excel对象模型的每次.Net调用都有很高的开销)
答案 2 :(得分:1)
使用get_range(cell1,cell2)方法获取单元格值。
您可以使用它按行,按列获取单元格值,或者一次性获取所有单元格值。
在调整代码以按行,逐列读取单元格值时,请继续监视CPU使用情况,或者一次性获取所有单元格值。