다음 두 가지 코드 중 어떤 경우가 더 나은지, 그 이유는 무엇입니까?GetOrAdded new to factory factory
.
private readonly ConcurrentDictionary<int, List<T>> _coll;
_coll.GetOrAdd(1, new List<T>());
이 필요하지 않은 경우에도 모든 호출에 대한 새로운 List
을 (우리가 capacity
0으로를 전달하는 경우이 사항이 여전히 얼마나 중요합니까?)을 작성합니다.
.
private readonly ConcurrentDictionary<int, List<T>> _coll;
_coll.GetOrAdd(1, (val) => new List<T>());
이것은 단지 수요에 List
을 만들지 만 위임 통화가 있습니다.
예를 들어'List'을 사용 했으므로 실제 컬렉션은 스레드로부터 안전합니다. 또한 Joseph의 제안을 참고하면'() => Enumerable.Empty ()'이 성능 향상에 도움이됩니까? –
Hele
또한 변경 사항이 바람직하지 않은 부작용이있는 .NET 4.5의 경우처럼 어떤 프레임 워크 버전이 사용되고 있는지 (새로운 동작이 구현되었는지 여부에 따라) 나타납니다. https://basildoncoder.com/blog/concurrentdictionary-getoradd-vs.html – Alex
@Hele'Enumerable.Empty()'을 사용한다면 델리게이트는 필요 없습니다.'Enumerable.Empty ()'는 정적 읽기 전용 필드를 읽습니다. 그러나 왜 IEnumerable '과 같은 읽기 전용 인터페이스를 사용해야하는지 잘 모르겠습니다. 나는 그것이 업데이 트를 어렵게 만들 것이라고 생각하지만, 코드를 더 볼 필요가있다. –