엑셀 vba로 개발하고 있는데 여기 물어보는게 좋다고 해서 와봄;;
Raw 데이터는 csv파일에 개당 8~40mb쯤 되고 한번에 4~12개 정도 입력받아서
필요한 파라미터 값만 뽑아다가 자동으로 분류하고 그래프 그려주는 툴이거든.
일단 현재 초기 버전은 다 개발해서 쓰고 있는데 속도가 느리다는 얘기가 있어서 코드 최적화 or 다시 만들려고 고민중임
일단 지금 초기버전은 Raw 파일 하나씩 읽어와서 임시 시트에 필요 값만 적어넣고 꺼주는 식이고
임시 시트에 누적된 내용을 파라미터별로 재배치한 뒤 그래프 그려주는 식으로 플로우가 짜여져있음
램은 항상 200mb언더로 먹어서 테스트삼아 돌렸을땐 Raw파일 60개 넣어도 터질일은 없었음
Raw 데이터를 싹다 배열로 램에 올려서 만진다면 단순계산으로는 32~480mb정도 필요할거같은데
이게 파일 열고 값 읽어오고 하는 과정에서 순간적으로 메모리 사용량이 올라갈 수 있다고 하더라고;;
물론 메모리 용량 넘어가면 터지는거고..
이게 사용량이 순간적으로 튄다는게 얼마나 올라가는지 모르겠어서
Raw파일을 3차원 배열로 넣고 돌려도 문제없는지 확인받고 손대보려는뎅
혹시 이런식의 데이터 분석툴 개발 경험 있는 사람있음?
배열말고 뭔가 또 다른 핸들링 방법이 있다면 조언 부탁함..
파일 다 읽고 배열로 만들면 (32~480mb) * 2 이상의 용량이 필요하긴 할듯. 파일에서 읽어온 버퍼가 차지하는 메모리 + 배열(버퍼로부터 데이터 카피된)
그리고 느리다고 했을 때, 어디서 느린건지 퍼포먼스 체크부터해보셈.
그건 이미 체크해봤는데 일단 엑셀 시트 호출하는 구문은 싹다 퍼포먼스 발목잡는 부분임 본문 내용에서 1. Raw 파일 하나씩 읽어와서 임시 시트에 필요 값만 적어넣고 -> 범위로 값 한번에 뿌려주는데도 시트 호출해오는거 자체가 속도저하 발생 요인임.. 2. 임시 시트에 누적된 내용을 파라미터별로 재배치한 뒤 -> 얘가 속도저하 제일 심한 구간인데 임시시트를 한Column씩 읽어와서 메인 시트에 뿌려주는게 반복되니까 속도저하가 심함
모루겟댜
그래서 엑셀시트 안거치고 배열위에서 데이터 알아서 조합하게 만들고 최종 결과물만 엑셀 시트에 뿌려주게 해보려구
메모리 사용량이 중요하면 파일 하나를 처음부터 끝까지 읽는 대신 한번에 정해진 크기만큼 읽는식으로 만드는건 어렵나 예를 들어 10만줄짜리 파일이 있으면 한번에 10만줄을 메모리에 올리는 대신 1000줄씩 메모리에 올려서 처리하는걸 100번 반복하는거지
아 이것두 한번 고민해봐야겠다 내 능지가 될지는 모르겠지만;;;;
파라미터 별로 재배치하는 부분까지를 다른 언어로 짜면?
Raw 파일이 csv니까 임시 시트에 데이터 취합하는것보다 파이썬같이 다른언어로 sqlite 사용해서 테이블에 취합 및 재배치하고 테이블 내용 csv로 저장한다음 vba에서는 그걸로 그래프만 그려보셈
Rdb에 넣어서 쿼리로 해도 백배는 빨라질듯 - dc App
그 생각도 하긴했는데 csv파일을 DB형식으로 변환하는데 시간 소모되지않음? SQL 같은걸로 처리하면 핸들링하는 과정 자체는 빠를거같긴한데..
님 방명록 확인해주세요
방명록 한 번만 더 봐주세요!