반사 성능 최적화 문제 로 인 한 사고.
1636 단어 반사
http://www.cnblogs.com/fish-li/archive/2013/02/18/2916253.html
http://www.cnblogs.com/JeffreyZhao/archive/2008/11/24/1338682.html
http://www.codeproject.com/Articles/14593/A-General-Fast-Method-Invoker
내 가 정리 한 결론:가장 좋 은 최적화 상황 에서 1-2 개의 수량 급(10-100 배)의 성능 을 향상 시 킬 수 있다. 구체 적 으로 말 하면 약 100 만 번 의 반사 로 약 0.0x-0.x 초의 성능 을 최적화 시 킬 수 있다.
그래,최 적 화 된 것 도 최 적 화 된 것 같 지?
그러나 이러한 결론 을 내 리 는 전 제 는 구조 위탁 대리 의 시간 이 총 소모 시간 을 계산 하지 않 았 다 는 것 이다.이것 은 다시 사용 할 수 있다 고 말 할 수 있 고 캐 시 를 한 번 구축 하면 된다.
지금 문제 가 생 겼 습 니 다.캐 시 성능 도 비용 이 듭 니 다.특히 병발 환경 에 서 는 적지 않 은 대가 가 있다.
나 는 단일 스 레 드 의 Dictionary 캐 시 성능 을 대충 테스트 했다.
static Dictionary<MethodInfo, FastInvokeHandler> dic = new Dictionary<MethodInfo, FastInvokeHandler>();
public static object FastInvoke(this MethodInfo methodInfo, object target, object[] paramters)
{
if (!dic.ContainsKey(methodInfo))
{
var mi = GetMethodInvoker(methodInfo);
lock (lockObj)
{
dic[methodInfo] = mi;
}
}
return dic[methodInfo].Invoke(target, paramters);
}
단일 스 레 드 100 만 회 이상 의 ContainKey 와[]작업 은 0.0x-0.x 초의 성능 비용 이 듭 니 다. ,나 도 해 봤 어.
최종 적 으로 실천 의 전체적인 중용 최적화 결 과 는 효과 가 뚜렷 하지 않 고 최 적 화 된 반사 성능 은 다른 곳 에서 증가 한 지출 에 의 해 상쇄 되 고 병발 문 제 를 가 져 온 것 이다.나의 결론 은 더욱 최적화 할 필요 가 없다 는 것 이다.당신 의 시스템 은 정말 1000 만 에 달 하 는 반사 호출 빈 도 를 가지 고 있 습 니까?정말 1000 만 의 반사 가 1 초의 최적화 효 과 를 향상 시 키 는 것 에 신경 을 쓰 십 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 반사 구현 Aop 에이전트 상세 정보반사를 이용하여 JDK의 동적 에이전트, 즉 AOP의 AOP 에이전트를 생성하여 목표 대상을 대체하고 코드에 증강을 직입한다. 프록시 인터페이스 정의 JDKf 동적 에이전트는 인터페이스에 동적 에이전트만 만들 수 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.