문제

내가 노력하고 최적화하는 동시 컬렉션을 최소화하려고 잠금에 대한 경합을 읽고 있습니다.첫째로 전달되었을 사용하여 연결된 목록하는 것을 허용 잠금 장치에 쓰는 동안 동시에 여러 개의를 읽고 계속할 수 있 차단입니다.이 사용자 지정 IEnumerator 하기 수율 다음 링크를 값입니다.업을 시작하면 비교가 반복을 통해 수집하는 일반 List<T> 나는 내 구현에 대해 반으로는 빠르(한 from x in c select x 에서의 컬렉션 1*m*항목을 받았 24msList<T>49ms 내 컬렉션).

그래서 난 사용 ReaderWriteLockSlim 과 희생이 작은 경쟁에서 읽고 그래서를 사용할 수 있었다. List<T> 내부 저장소입니다.이후 나를 캡처 할 수 있에 반복을 시작하고 출시에 그것을 완성,난지 수율에 대한 패턴 내 IEnumerable, foreaching 을 통해 내부 List<T>.지금 내가 있었 지만 66ms.

나는 샌프에서 어떤 목록에 실제적으로 사용하여 내부 저장소의 T[] 고 사용자 지정 IEnumerator 이동하는 인덱스를 기대하고 반환합니다 현재 지수는 값입니다.지금은,수동으로 사용 T[] 저장소로 많은 의미,유지 보수 작업 하지만 wth, 이,나를 쫓는 마이크로초 단위로.

그러나 심지어는 흉내 낸 IEnumerator 이동하는 인덱스에는 배열,최고의 할 수 있는 대 ~38ms.그래서 무엇을 제공합 List<T> 그것의 비밀이스 또는 대안은 무엇의 빠른 구현에 대한 반복기?

업데이트: 밝혀 나의 주요 속도 범인을 실행하 Debug 컴파일하는 동안, List<T> 은 분명히 릴리스 컴파일.에서 릴리스 나의 구현은 여전히 머리보다 느리 List<T>,비록에 모노 그것은 이제 더 빠르다.

다른 하나의 제안을 내 친구에서는 BCL 이 빠르기 때문에 그것의 GAC 에 따라서 얻을 수 있습 pre-으로 컴파일 시스템입니다.을 넣어 것입니다 내에서 테스트 GAC 을 테스트하는 이론입니다.

도움이 되었습니까?

해결책

을 획득하고 잠금을 해제하에 각 반복 소리가 나쁜 생각이냐-를 수행하는 경우 AddRemove 하는 동안 당신은 반복을 통해,목록 하는 것이 무효화 반복기입니다. List<T> 확실히 좋아하지 않는,예를 들어.

귀하의 사용을 허용하였을 경우 호출자를 꺼내 ReaderWriterLockSlim 의 주위에 자신의 전체 프로세스의 반복이 아닌 항목별로 기초?는 것이 더 효율 더 강력합니다.하지 않을 경우,당신은 어떻게 계획을 처리하는 동시성 문제입니까?는 경우 작가 추가 요소보다 이전 장소가 어디서 나는,단순한 구현에서 반환하는 것 같은 요소에 두 번.반대 일어날 것으로 제거-반복기를 건너 뛸 것이라는 요소입니다.

마지막으로,입니다.NET4.0 옵션이 될 수 있습니까?내가 알고있는 몇 가지 최적화 동시 컬렉션가...

편집:나는 확실히 당신의 현재 상황은 구축의 관점에서 반복자에 의해 손으로,하지만 한 가지할 수 있는 조사가 사용하는 구조체에 대한 IEnumerator<T>, 의 컬렉션은 명시적으로 선언하는 반환하는 것 List<T> 는 않습니다.그 용하여 변경할 수 있는 구조체를 만드는 고양이 울고 세계의 모든지만,이 절대적으로 중요하의 성능과 당신이 생각이 살 수 있는 공포와,그것의 적어도 시도 가치가있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top