실제로 여러 스레드를 사용하여 여러 작업을 처리하는 응용 프로그램에서 작업 중이며 부모 응용 프로그램은 나중에 출력을 추가하는 arraylist를 사용하여 나중에 파일에 쓰게됩니다. 대기열에서 항목을 제거 할 때 속도가 느려집니다. arraylist 부분을 최적화 된 읽기 및 지우기를위한 연결 목록으로 변환하려고 생각하고 있었는데 누구나 우리가 나를 확인할 수 있습니까?. linkedList 구현. threadsafe 또는 threadsafe인지 arraylist를 사용하고 있습니까?. LinkedList 구현은 .Net threadsafe입니까?
답변
reference 상태는 것을 :
이 유형은 스레드로부터 안전하지 않습니다. LinkedList (Of T)를 복수 스레드로 에 액세스해야하는 경우 은 자체 동기화 메커니즘을 구현해야합니다.
LinkedList (Of T)는 컬렉션이 수정되지 않았으므로 여러 판독기를 동시에 지원할 수 있습니다. 그래도 컬렉션을 통해 열거하는 것은 본질적으로 스레드 안전 프로 시저가 아닙니다. 드문 경우 인 열거 형이 쓰기 액세스로 을 차지하는 경우 전체 열거 중에 컬렉션을 잠 가야합니다. 컬렉션을 읽고 쓰는 여러 스레드에서 액세스 할 수있게하려면 자신의 동기화를 구현해야합니다.
편집 : ArrayList에 관해서는
의 reference 상태 : (Visual Basic의 경우 Shared)공공 정적이 유형의 멤버는 스레드로부터 안전합니다. 모든 인스턴스 구성원은 스레드 안전성이 보장 된 이 아닙니다.
컬렉션이 수정되지 않는 한 ArrayList는 복수 리더를 동시에 지원할 수 있습니다. 은 ArrayList의 스레드 안전성을 보장하기 위해 모든 작업은 동기화 메서드에서 반환 된 래퍼를 통해 을 수행해야합니다.
컬렉션을 통해 열거하는 것은 본질적으로 스레드 안전 절차가 아닙니다. 입니다. 컬렉션이 인 경우에도 다른 스레드는 컬렉션을 수정할 수 있으므로 열거자가 예외를 throw합니다. 열거 중에 스레드 안전을 보장하려면 전체 열거 중에 컬렉션을 잠 그거나 다른 스레드가 변경 한 내용으로 인해 예외를 catch 할 수 있습니다.
C# 4 태그를 지정 했으므로 BlockingCollection<T>
을 사용하십시오.
이것은 스레드로부터 안전하며 필요할 때 트래픽을 조절할 수있게 해줍니다.
이 컬렉션 클래스는 작업을 위해 설계되었습니다. 그러나 결국 파일에 쓸 때 컬렉션의 성능은 중요하지 않습니다.
네임 스페이스 System.Collections.Concurrent에서 모든 스레드로부터 안전한 컬렉션이 작업을 수행해야합니다. 그러나, perf 관점에서, 나는 그들이 어떤 syncroniazation 오버 헤드가있을 것이라고 생각 어레이보다 잘 수행 할 생각하지 않습니다. 당신이 요청 스레드 safetiness과 성능을 동시에 achieveable하지 않을 수 있습니다, 당신은 어쨌든 때문에 복싱/언 박싱의 느려질 수 http://msdn.microsoft.com/en-us/library/dd267265.aspx
- 1. Generators Threadsafe입니까?
- 2. Java : ServerSocket.accept는 threadsafe입니까?
- 3. iPhone - ASIHTTPRequest는 threadsafe입니까?
- 4. 은 with_scope threadsafe입니까?
- 5. SynchronizationContext.Post()는 threadsafe입니까?
- 6. Observable LinkedList
- 7. Public LinkedList
- 8. 작업 단위 패턴의 .net 참조 구현은 무엇입니까?
- 9. LinkedList "node jump"
- 10. LinkedList ... 상속 ... 무엇?
- 11. SmallTalk에서 LinkedList 클래스 사용?
- 12. C Vector/ArrayList/LinkedList
- 13. Java의 LinkedList 매개 변수
- 14. random_shuffle은 threadsafe입니까? 그렇지 않은 경우 rand_r을 사용하십시오.
- 15. LinkedList 요소 스왑 문제 C
- 16. LinkedList 틀린 표시 (문자열 작성기)
- 17. Java - PriorityQueue vs Sorted LinkedList
- 18. ASP.NET 용 Comet 구현은 무엇입니까?
- 19. IDynamicMetaObjectProvider의 가장 간단한 구현은 무엇입니까?
- 20. `strtol`의 구현은 무엇입니까?
- 21. XQueryX의 모든 구현은 무엇입니까?
- 22. markdown의 표준 구현은 무엇입니까?
- 23. 좋은 신원지도 구현은 무엇입니까?
- 24. BindModel() 구현은 어떻게해야합니까?
- 25. 최상의 MPI 구현은 무엇입니까
- 26. OCaml의 SHA256 구현은 제정신입니까?
- 27. 올바른 생성자 구현은 무엇입니까?
- 28. 자바 구현은 C에서
- 29. Java의 가장 가벼운 비 동시성 Iterable 구현은 무엇입니까?
- 30. 닷넷과 자바의 DSA 구현은 호환 가능합니까?
ArrayList를 참조, 일부 트레이드 오프 포인트 이상
에 와서해야 할 수도 있습니다 , 특정 유형을 처리하는 콜렉션에 대해 작업 할 수 없습니까? –
나는 수천 건의 레코드를 받았다. 즉, 나는 약간의 메모리 의식이 있어야만한다는 것을 의미한다. – CodeWrite
List가 ValueTypes를 저장한다면 복싱 만있을 것이다. 나는 그것을 Q에서 읽지 않는다. –