2012-08-16 5 views
1

나는 많은 양의 데이터를 생성하는 프로그램을 가지고 있는데, 이것은 데이터가 생성 될 때마다 한 줄씩 csv 파일에 씁니다. excel에서 csv 파일을 열 수 있다면 약 10 억 개의 셀 (75,000 * 14,600)이됩니다. 나는 System.OutOfMemoryException을 던져서 액세스하려고 할 때마다 (심지어이 크기의 배열을 만들 때도) throw됩니다. 누구든지 데이터를 vb.net으로 가져올 수있는 방법을 알고 있다면 간단한 작업 (모든 데이터를 한 번에 사용할 수 있어야 함)을 수행 한 다음 모든 아이디어를 시도해 볼 것입니다.vb.net에서 매우 큰 배열을 처리하는 방법

나는 사용 된 램의 양을 늘려 보았지만 다른 기사들/게시물들은 이것이 10 억 마크 전에 짧게 돌아갈 것이라고 말한다. 여기에 시간 문제는 없습니다. 며칠/주로 처리 할 수 ​​있다고 가정합니다 (1 년에 한 두 번만 실행합니다). 어쨌든 그것을 할 수 없다면 내가 생각할 수있는 유일한 해결책은 ~ 75,000까지의 컬럼 수를 늘리는 것입니다 (가능하다면 다른 방법으로 데이터를 쓸 수 없습니다). 이걸 처리 할 수있는 또 다른 언어가 있다면? 로,

Dim bigmatrix(75000, 14600) As Double 

많은 감사, 프레이저 :

+0

왜 모든 데이터를 한 번에 사용할 수 있어야한다고 말합니까? 최선의 접근법은 귀하의 모든 힘으로 성명서에 질문하는 것입니다. :-) –

+0

Jason, 어떻게하면 데이터를 한 행씩 파일에 씁니다. 그런 다음 데이터를 바꿔야합니다 (예 : 행 등). 모든 날짜없이이 일을하는 합리적인 방법을 볼 수 없습니다. 당신이 할 수 있다면 좋을 것입니다! :) – FraserOfSmeg

+0

방금 ​​거대한 CSV를 조 변경하려고한다면, 개념적으로 배열을 1,000 x 1,000의 큰 덩어리로 나누십시오. 즉, 한 번에 1000 개의 행을 읽고, 그 전조를 계산하고, 각 청크를 파일에 기록하십시오. 그런 다음 해당 부분을 (중첩 된 형식으로) 읽고 최종 파일을 스트리밍하는 병합 통과를 수행 할 수 있습니다. –

답변

1

첫째, 항상 64 비트 운영 체제와 RAM의 상당히 많은 양이 필요합니다 : 현재

은 바로 시작 실패 약 8GB를 할당하려고합니다.

gcAllowVeryLargeObjects을 설정하면 이론적으로 .NET 4.5를 대상으로하는 Visual Basic에서 가능합니다. 즉, 가능한 경우 다차원 배열 대신 jagged array을 사용하는 것이 좋습니다. 이렇게하면 8GB의 단일 할당이 필요하지 않습니다. (이로 인해 잠재적으로 .NET 4 또는 이전 버전에서도 작동 할 수 있습니다.

+0

안녕 리드, 도와 줘서 고마워! 내 VS2010 에디션과 행운에 지그재그 배열을 시도했습니다. 그래서 다운로드하고 설치하고 있습니다 .net4.5 :) 내가 돌아와서 작동하게하면 다시 올거야! 다시 한 번 감사드립니다! – FraserOfSmeg

+0

@ user1601928 얼마나 많은 메모리가 있습니까? 어떤 OS를 사용하고 있습니까? –

+0

현재 내 노트북에서 실행 중 : 4GB 램, 7 - 64 승, 인텔 i5 2.3GHz. 실제로 gcAllowVeryLargeObjects를 어떻게 켜겠습니까? 나는 가장 최근의 VB를 다운로드했지만, 정확히 어떻게 켜는 지 모르겠다. :/어떤 도움도 감사 할 것이다. :) – FraserOfSmeg

관련 문제