从excel文件读取时CPU使用率达到100%?
问题描述:
我创建了一个VB.Net应用程序,它将从excel文件中读取并将数据放入一个表中。 我用了一个有3列和65000行的Excel表格。 在开始读取excel之前,我的机器的CPU使用率约为15%,但在读取期间CPU使用率跳至95%。 我不知道它为什么会发生?有人可以帮我解决这个问题吗? 以下是我写的代码:从excel文件读取时CPU使用率达到100%?
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提前。
答
这是完全正常的。一个程序只有不会当I/O陷入困境时刻100%核心。从磁盘或网卡上读取,这会在操作系统提供数据时阻止程序。你的代码不会像这样陷入困境,你要求它做一堆工作。逐个获取195,000个单元值需要一段时间。 Excel是一个进程外COM服务器,因此每个单元读取需要两个CPU上下文切换。您可以通过使用Range来优化它。或者通过在带有双核CPU的机器上运行它,因此它只能拍摄高达50%。
功能,而不是一个错误。
答
将195000个单元一次读入Object数组,然后循环对象数组的速度要快得多。 (每个.Net调用Excel对象模型的开销非常高)
答
你的代码是什么样的? – APrough 2012-04-05 12:06:52
从excel中读取和单独插入65k记录只需要一些CPU电源,这就是全部... – Mr47 2012-04-05 12:18:22
我尝试了没有插入和jus 1000行也,那时候它也会达到最大。 – 2012-04-05 12:21:13