리플렉션은 실제로는 달리 할 수없는 일을 달성 할 수 있습니다.
예를 들어이 코드를 최적화하는 방법을 고려하십시오.
int PoorHash(char Operator, int seed, IEnumerable<int> values) {
foreach (var v in values) {
seed += 1;
switch (char) {
case '+': seed += v; break;
case '^': seed ^= v; break;
case '-': seed -= v; break;
...
}
seed *= 3;
}
return seed;
}
내부 루프 중간에 값 비싼 테스트가 있지만 추출하려면 각 연산자에 대해 루프를 한 번 다시 작성해야합니다. 리플렉션을 사용하면 루프를 수십 번 반복하지 않고도 해당 테스트를 추출하여 성능을 유지할 수 있습니다 (따라서 유지 관리 성을 희생). 필요한 루프를 즉시 생성하고 컴파일하십시오.
나는 한 사실이 최적화를 수행 은 조금 더 상황을 복잡하지만, 그 결과는 놀라운 있었다. 성능이 크게 향상되고 코드 줄이 줄어 듭니다.
(참고 : 처음에는 char 대신 Func에 전달하는 것과 동등한 방법을 시도했지만 약간 더 좋았지 만 거의 10 배 반사되지는 않았습니다.)