1

Excelファイルから読み取り、データをテーブルに入れるVB.Netアプリケーションを作成しました。3 列 65000 行の Excel シートを使用しました。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

事前にt​​hx。

4

3 に答える 3

3

195000個のセルを一度にオブジェクト配列に読み込んでからオブジェクト配列をループする方がはるかに高速です。(Excelオブジェクトモデルへの.Net呼び出しごとに非常に高いオーバーヘッドがあります)

于 2012-04-05T13:31:44.993 に答える
1

get_range (cell1,cell2)メソッドを使用して、セルの値を取得します。

これを使用して、セル値を行ごと、列ごとに取得するか、すべてのセル値を一度に取得できます。

行ごと、列ごと、またはすべてのセルの値を一度に取得するようにコードを調整するときは、CPU 使用率に注意してください。

于 2012-04-05T13:46:32.830 に答える