반사 성능 최적화 문제 로 인 한 사고.

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 초의 최적화 효 과 를 향상 시 키 는 것 에 신경 을 쓰 십 니까?
 
 
 
 
 

좋은 웹페이지 즐겨찾기