2012-10-25 4 views
3

처리 된 네트워크 파일 공유 목록 (전체 UNC 경로 유지)을 메모리에 저장해야이 폴더를 다시 처리하지 않아도됩니다.긴 값 목록을 저장하는 가장 좋은 방법

배열을 사용할 예정 이었지만 이제는 해시 테이블이 더 빠른 옵션 일 수 있다고 생각합니다. 폴더 경로 (문자열 값)가 이미 존재하는지 몇 군데를 확인해야합니다.

무엇이 가장 빠르며 (그 값의 존재를 확인하기 위해) 무엇보다 적은 메모리를 소비합니까? 난 그냥 실행 : 키 = 폴더 경로와 한 차원 배열의

  • 저장 폴더 경로는
  • 뭔가 다른
  • UPDATE 빈 값으로 해시 테이블에

    1. 저장 폴더 경로 그 스레드 에서처럼 50000 개의 문자열을 생성하고 3 개의 조회를 수행하여 아래에서 지적한 몇 가지 테스트가 있습니다. 또한 메모리 사용량을 살펴보고 HashSet이 승자입니다. HashTable은 여전히 ​​좋은 선택이지만 Array는 최악의 선택입니다.

      배열 - 125048 MS는, 조회하는 37 밀리 생성, 18MB는 RAM에

      해시 - 1966 MS에 - 2167 밀리

      HashSet의 RAM에, 2.4MB를 조회하는 0.74 밀리 만들 수 있습니다 당신이 그것을하고있는 항목의 수는 relativel입니다 채우기 후 키를 쿼리 할 예정으로

    +0

    당신의 목록이 얼마나 클 것으로 기대하십니까? – dugas

    +0

    수만개의 폴더를 쉽게 만들 수 있습니다. – mishkin

    +0

    죄송합니다. powershell V2 – mishkin

    답변

    4

    hastable이 상황에서 배열을 통해 바람직하다 RAM에서 조회 할 수 0.02 MS, 1.4MB를 만들 큰. 나는 해시 테이블로 시작하겠다. 성능이 적합하지 않은 경우, 사용하는 같은, 다른 것을 시도 그물의 Dictionary(T,V) 또는 .net 3.5 +의 HashSet(T) 또한

    , 여기에 관심있는 링크입니다 :

    Powershell 2 and .NET: Optimize for extremely large hash tables?

    +1

    에 감사드립니다. 해시 삽입이 대부분의 시간을 필요로한다는 것을 인식하지 못했습니다. 나는 지금 이것을 테스트하고있다 ... – mishkin

    +1

    나는 나의 테스트의 결과로 질문을 업데이트했다 - 해시 세트가 승자이다! – mishkin

    관련 문제