내 현재의 클래스 디자인에C#을 COMDelegate :: DelegateConstruct 최적화
ICollection<ICache> caches = new HashSet<ICache>();
ICollection<T> Matches<T>(string dependentVariableName)
{
return caches
.Where(x => x.GetVariableName() == dependentVariableName)
.Where(x => typeof(T).IsAssignableFrom(x.GetType()))
.Select(x => (T) x)
.ToList();
}
같은 몇 가지 기능을 사용하고 있습니다. 그들은 아키텍처 관점에서 훌륭하게 작동합니다. 다양한 관련 유형 (이 경우 ICache)의 객체를 임의로 추가하고 구체적인 유형의 컬렉션으로 검색 할 수 있습니다.
여기서 프레임 워크는 과학적인 패키지이며 이러한 종류의 기능은 몇 분 동안 수천 번 호출되는 매우 뜨거운 코드 경로에 놓여 있다는 것이 문제입니다. 그 결과, 위의 같은
과 기능이 COMDelegate :: DelegateConstruct의 주요 소비자이다.
샘플 %의 상대 분포에서 알 수 있듯이 이것은 거래 차단기가 아니지만 오버 헤드를 약간 줄이는 것이 환상적입니다!
미리 감사드립니다.
그래서 # 2 나는 즉시 바뀔 수있다 (고마움). R/E # 1,이 LINQ식이 성능 보고서에서 "이 함수는 ...에 의해 호출 됨"기능 때문에 DelegateConstruct 호출과 관련되어 있음을 알고 있습니다 (이 줄은 "핫 코드 통로"). 나는 이것을보고있다 : http://msmvps.com/blogs/jon_skeet/archive/2011/08/23/optimization-and-generics-part-2-lambda-expressions-and-reference-types.aspx 그리고 내 문제가 람다 식 내에서 일반적인 주장의 사용과 관련이 있는지 궁금해하십니까? 나는 IsAssignableFrom이 캐시 될 것이라고 생각 했을까? – D3C34C34D
또한 코드를 풀려면 여기를 github : https://github.com/JLospinoso/sie/blob/master/SienaDotNet/Modeling/Caches/Repository/CacheHashSet.cs – D3C34C34D