2012-04-05 2 views
1

excel 파일을 읽고 해당 데이터를 테이블에 넣을 VB.Net 응용 프로그램을 만들었습니다. 3 열과 65000 행의 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 

들으 : 다음 내가 작성했던 코드입니다.

+0

코드의 모양은 어떻습니까? – APrough

+0

65k 레코드의 Excel 및 개별 삽입물을 읽는 중 일부 CPU 사용량이 필요합니다. 그게 전부입니다 ... – Mr47

+0

삽입구없이 jus 1000 행을 사용해 보았습니다. 그 시간도 최대로 갈 것입니다. –

답변

4

이것은 전적으로 정상입니다. 프로그램이 인 경우 I/O로 인해 수렁에 빠졌을 때 012 %의 코어가 연소되지 않습니다. 운영 체제가 데이터를 제공하는 동안 프로그램을 차단하는 디스크 또는 네트워크 카드에서 읽기. 당신의 코드는 그렇게 느려지지 않는다. 당신은 많은 일을하도록 요구하고있다. 하나씩 하나씩 195,000 개의 셀 값을 가져 오는 데는 시간이 걸립니다. Excel은 out-of-process COM 서버이므로 모든 셀을 읽으려면 두 개의 CPU 컨텍스트 스위치가 필요합니다. 대신 범위를 사용하여 비트를 최적화 할 수 있습니다. 또는 2 코어 CPU가 장착 된 컴퓨터에서 실행하여 최대 50 % 만 촬영합니다.

기능이 아닌 버그.

3

195000 셀을 Object 배열로 읽고 객체 배열을 루프하는 것이 훨씬 빠릅니다. (각 Excel 개체 모델에 대한 .Net 호출에 대해 매우 높은 오버 헤드가 있습니다.)

1

메서드를 사용하여 셀 값을 가져옵니다.

행, 열별로 셀 값을 가져 오거나 한 번에 모든 셀 값을 가져 오는 데 사용할 수 있습니다.

행, 열별로 셀 값을 읽거나 한 번에 모든 셀 값을 읽도록 코드를 조정할 때 CPU 사용을 감시하십시오.

관련 문제