2011-04-22 3 views
1

Windows Mobile 5에서 C#을 사용하고 있습니다.이 프로그램은 인터넷에서 대용량 파일을 해시 값과 함께 다운로드합니다. 그런 다음 다운로드 된 데이터의 해시 값을 계산하여 예상 된 해시 값과 비교합니다. 아이디어는 전체 파일이 손상되지 않았 음을 확인하는 것입니다.큰 데이터 크기를위한 메모리 효율적인 해시 알고리즘

파일 크기가 커서 파일의 전체 내용을 메모리에 바이트 배열로 저장하면 장치의 메모리가 부족할 수 있습니다. 그러나 바이트의 해시를 계산할 수 있도록이 작업을 수행하려고합니다. 한 번에 모든 바이트를 메모리에 저장하지 않고도 해시를 계산할 수 있습니까? 가급적 SHA1Managed 클래스를 사용하여 SHA1 해시를 계산하고 싶지만 필요한 경우이를 변경하려고합니다. 스트림을 받아들이는 SHA1Managed.ComputeHash() 메서드의 오버로드가 있음을 알았지 만 모든 바이트를 메모리로 가져 오는 것보다 적은 메모리를 사용하는지, 그리고 내가 알고있는 메모리 프로파일 러를 알지 못합니다. NET CF는 완전히 쓸모가 없습니다. 여기

답변

3

SHA1Managed.ComputeHash(Stream)은 해시 값을 계산 한 후 스트림의 내용을 삭제한다고 가정 할 때 메모리가 더 효율적이어야합니다. 얼마나 많은 메모리를 사용할지는 부분적으로 Stream 구현을 기반으로합니다.

+0

데이터가 이미 파일에 기록 된 경우이를 위해 좋은 스트림 구현은 무엇입니까? FileStream을 반환하는 File.OpenRead (fileName)을 사용하는 것이 좋습니까? –

+0

FileStream이 정상적으로 작동해야합니다. –

+0

Stream 구현이 전체 파일을 메모리로 가져 오는 경우 메모리가 부족한 곳에 충분한 크기의 파일로 시도해 보았습니다. 고마워! –

1

그것이 바탕 화면에 어떻게하는지입니다 :

Compute a hash from a stream of unknown length in C#

그것의 양보다 더 큰 입력 소스를 사용하여 스트림 구현이 전체 파일에서 가져옵니다 여부를 테스트 꽤 쉽게해야 사용 가능한 메모리.

+0

Stream 구현을 테스트하기에 충분히 큰 파일을 사용하는 것에 대해 감사드립니다! –

관련 문제