2011-12-31 4 views
3

나는 파일을 수정하는 프로그램을 만들고 있는데, 내가 쓰고있는 방식이 잘못된 것인지 궁금하다.바이트 배열로 파일을 저장하고 파일 스트림을 읽고 쓰는 것에 비해?

파일은 다른 파일 안에있는 블록으로 저장되며 일련의 해시로 구분됩니다. 크기가 약 1MB에 불과하므로 위치를 한 번 계산하고이를 바이트 배열로 읽어서 그런 식으로 작업하십시오.

크기에도 불구하고 전체 파일을 메모리의 바이트 배열로 읽는 것이 끔찍한 프로그래밍 습관 일지 궁금합니다. 그것은 내 프로그램의 유일한 목적이지만 그것이 취하는 유일한 기억에 관한 것입니다.

답변

2

이것은 전체적으로 예상되는 파일의 크기 (범위)에 따라 달라집니다. 입력 파일의 크기가 100MB를 넘을 수있는 경우에는이 방법이 적합하지 않습니다.

에서 입력 파일이 작고 메모리의 내용이 모두 일 때 프로그램 디자인의 이점을 얻으면 끔찍하지 않습니다. 그것은 합리적인 것입니다. 소프트웨어가 실제로 메모리에 전체 파일의 내용을 필요로하지 않는 경우

그러나,이 일을 위해 인수 많이하지를 거기 (더 작은 파일.)

+0

좋아, 좋아. 그게 내가 생각한거야. 파일은 일반적으로 약 500kb에서 1.5MB로 이동하며 프로그램을 사용하는 사람들은 일반적으로 2GB 이상의 RAM을 사용합니다. – mowwwalker

0

끔찍한 일입니다 - 대부분의 메모리/CPU 호깅 활동과 마찬가지로 - 할 필요가없는 경우.

+1

메모리 호깅 (잠재적으로)에 대한 요점을 볼 수는 있지만 어떻게 CPU를 소비할까요? –

+0

@ M.Babcock 디스크에서 메모리로 데이터를 마샬링하려면 반드시 일련의 읽기 및 이동 명령이 필요합니다. – Rob

+0

@robjb - 아마도 '돼지'라고 불릴만큼 충분하지는 않습니다. 게다가 그들은 전체 파일을 메모리로 읽든 읽지 않든간에 일어날 수있는 읽기 및 이동 지침이 있습니다. 더 나쁜 것은 단지 메모리 대신 디스크에서 임의 액세스 작업을 수행하는 것입니다. –

1

당신이 랜덤 읽기가 필요한 경우/쓰기 액세스 파일을 수정하기 위해 파일을 수정 한 다음 파일을 특정 크기 (메모리에 수백 MB 파일을 읽지 않으려는)를 초과하지 않을 것임을 확신 할 수있는 한 메모리로 읽는 것이 좋습니다.

일반적으로 스트림 리더 (예 : BinaryReader)를 사용하고 이동 중에 데이터를 처리하는 것이 더 좋습니다.

+0

수정 된 파일을 다른 위치에서 열 수있는 것도 장점입니다. 1.5MB를 초과하지 않습니다. – mowwwalker

관련 문제