Microsoft MVP성태의 닷넷 이야기
파일 저장 방법에 대해 조언 부탁드립니다. [링크 복사], [링크+제목 복사],
조회: 15014
글쓴 사람
C#초보
홈페이지
첨부 파일
 

안녕하세요. 현재 제가 만들고 있는 프로그램에서 어떤 방식으로 파일을 저장해야 좋을지에 대해 조언을 부탁드리고 싶습니다.

이 프로그램은 평일에 계속 시계열 자료를 받는 용도로 만들고 있습니다.

인덱스값, 발생시각, 자료값들 중에서 인덱스 값을 제외한 모든 값을 string 형태로 받고 있습니다.

중간에 자료형을 변환하는 비용을 없애기 위해, 자료 수신시마다 자료형 변환 없이 구조체를 사용해서 리스트 안에 이 구조체를 저장하고 있습니다.

기존에는 이렇게 리스트에 자료값이 든 구조체를 저장하다가, 구조체의 수가 특정 수(50이나 100)가 되면

csv형태로 디스크에 append하고(for loop 이용), 해당 리스트는 Clear()로 다시 비웠습니다.

그런데 Serialization에 대해 알게 되어서, 이걸 이용해서 자료를 디스크에 쓰게 되면 훨씬 더 효율적일 수 있다는 생각이 들었습니다.

저는 단순히 디스크에 저장할 용도로 사용하길 바라기 때문에 BinaryFormatter를 사용해 볼까 하는데요.

이게 제가 설명드린 사용 목적 - 실시간으로 받은 자료를 중간 중간 이어서 디스크의 동일 파일에 저장 - 에 부합하는 방법일까요?

가능은 하겠지만, 이게 과연 표준적으로 사용하는 방법인지, 퍼포먼스적인 관점에서 더 나은 방법이 있는지 조언을 얻고 싶습니다.








[최초 등록일: ]
[최종 수정일: 11/10/2019]


비밀번호

댓글 작성자
 



2019-11-10 07시30분
지금 csv 형태로 쓰고 있던 그것도 일종의 수동 serialization이라고 보면 됩니다. .NET BCL에서 자동으로 해주는 Serialization은 그 과정을 Reflection 등의 정보를 통해 자동화하는 것 뿐입니다.

따라서 BinaryFormatter로 바꾸시면 동일한 목적을 이룰 수 있습니다. 하지만, 성능이나 저장 공간 측면에서 보면 기존에 비해 만족스럽진 않을 것입니다. 왜냐하면 직렬화 시 데이터의 크기라든지 타입 등의 정보도 함께 출력이 되기 때문에 다소 늘어날 수 있습니다. (이 부분은 약간의 샘플 데이터로 테스트해 해보세요.)

제 생각에는 현재 인덱스를 제외한 각 자료값들의 타입 정보가 크게 중요하지 않고 데이터들의 내용이 CSV를 써도 될 만큼 간단한 것 같은데, 그렇다면 그냥 기존의 방식을 쓰시는 것도 나쁘지 않은 선택으로 보입니다.
정성태
2019-11-10 11시03분
[C#초보] 조언해 주셔서 감사합니다.
네, 말씀하신대로 실제 데이터를 넣어서 바이너리로 저장을 하니까 용량이 꽤 되네요. 아무래도 이 방법도 사용하기는 힘들 듯합니다.
제가 걱정되는 부분은 csv로 파일 쓰기 반복문이 실행되는 사이에 수신되는 데이터를 놓치는 부분인데요. 이 부분은 고민을 좀 해 봐야겠네요.
[guest]
2019-11-11 08시42분
얼마나 수신 데이터가 많은지는 모르겠지만, 그렇다면 쓰기 처리를 하는 부분을 별도의 스레드로 분리하면 되지 않을까요? 50~100개가 list에 담기면 그 리스트 인스턴스를 Queue에 저장하고 이후의 데이터는 새로운 list에서 담도록 만들고 Queue에 담긴 것은 다른 스레드에서 쓰기 처리를 하면 될 것입니다.
정성태

... 61  62  63  [64]  65  66  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
1015개똥이12/22/201117569RMCLOCK 설정 관련 질문이요ㅜ [2]
1011사길수12/16/201117655hyper-v 이더넷 카드 관련 문의 좀 드립니다. [1]
1006루로니12/13/201119751윈도우7과 XP의 DLL후킹 처리에 관해서 질문입니다. [3]
1005남산골12/13/201119540안녕하세요!! 첫 인사드립니다. [3]
1004뽀로로12/12/201116623Managed 어셈블리에서의 COM EntryPoint procaddress 문제 [1]
1003나그네12/8/201118703닷넷에서 가상메모리(Commit) 의 크기를 줄이거나 해제하는 방법은 어떻게 해야할지요? [1]
1002나그네11/29/201118287안녕하세요 ^^ 문제가 생겨서 혹시나 여기서라면 답이 나오지 않을까 해서.. [1]
1001선무당11/29/201119382clickonce+ntd 시스템에서 proxy Server 가 개입되는 경우 cache 해결을 위한 방법... [1]
1000초보개발자11/28/201117742웹서비스용 웹 서버의 SSD 가치에 대해서... [1]
999날쌘돌이11/25/201115335ADFS와 WIF 질문 [1]
998윤용한11/9/201117205File Write 도중 정전 발생 시 대처 방법 있나요? [2]
997조장원11/7/201116574Silverlight 에서의 Auth 방법에 대한 고찰 [2]파일 다운로드1
996파몽11/3/201119646VS2010 에서 타겟플랫폼이 x86으로 변경이 된걸일까요? [2]
995강신명10/24/201116251sharepoint2010+win7 client 오류 [2]파일 다운로드1
992라이언10/11/201116374캡션에 chapter numbers 넣기
993정성태10/11/201118974    답변글 [답변]: 캡션에 chapter numbers 넣기
991우상욱8/21/201120629세션 타임 아웃에 관해서 질문드립니다. [2]
990김재영8/20/201123741VS2010의 윈폼의 Load이벤트에서 예외가 잡혀지지 않습니다. [3]파일 다운로드1
989우상욱8/20/201116682polling에 대해 감이 안잡혀서 질문드립니다 [1]
988WooY...8/17/201116907성태님~ 작은 부탁 하나 있습니다~ [2]
987에스패스트8/3/201118800비밀글쓰기가 있으면 참좋을탠대 아쉽네요 ^^ 저 한가지만더.. [5]
986에스패스트8/3/201121967안녕하세요 ^^ 이렇곧도 있군요 ~ 참좋네요 질문 한가지 여쭤볼게요 [6]
985이성환7/27/201118410P/Inovke 관련 질문입니다. [4]파일 다운로드1
983이성환7/13/201127034Mouse이벤트 관련해서 질문있습니다. [10]파일 다운로드2
982궁굼이7/12/201118863TFS2010 사용관련 [2]
981김창욱7/11/201121196주식형태의 프로그램 처럼 SQL서버의 특정 필드 데이터의 변화가 있을때 재 클라이언트가 정보를 갱신 할 수 있게 하는 방법은 없을까요? [2]
... 61  62  63  [64]  65  66  67  68  69  70  71  72  73  74  75  ...