Ele é provavelmente um hacker C antigo e sim, ele fala de bunda. .Net não é C ++; o compilador .Net continua melhorando e os hacks mais inteligentes são contraproducentes, se não hoje, na próxima versão .Net. Pequenas funções são preferíveis porque .Net JIT-s todas as funções antes de serem usadas. Portanto, se alguns casos nunca forem atingidos durante um ciclo de vida de um programa, nenhum custo é incorrido na compilação JIT. De qualquer forma, se a velocidade não é um problema, não deve haver otimizações. Escreva para o programador primeiro, para o segundo compilador. Seu colega de trabalho não será facilmente convencido, então eu provaria empiricamente que um código melhor organizado é realmente mais rápido. Eu escolheria um dos seus piores exemplos, reescrevê-los de uma maneira melhor e, em seguida, garantir que seu código seja mais rápido. Cherry-pick se você deve. Em seguida, executá-lo alguns milhões de vezes, perfil e mostrar-lhe. Isso deve ensiná-lo bem.
EDITAR
Bill Wagner escreveu:
Item 11: Entenda a Atração de Pequenas Funções (C # Efetiva Segunda Edição) Lembre-se de que traduzir seu código C # em código executável por máquina é um processo de duas etapas. O compilador C # gera IL que é entregue em assemblies. O compilador JIT gera código de máquina para cada método (ou grupo de métodos, quando inlining está envolvido), conforme necessário. Pequenas funções tornam muito mais fácil para o compilador JIT amortizar esse custo. Pequenas funções também são mais propensas a serem candidatas a inlining. Não é apenas pequenez: o fluxo de controle mais simples é importante. Menos ramificações de controle dentro das funções facilitam o registro do JIT para o registro de variáveis. Não é apenas uma boa prática escrever códigos mais claros; é como você cria um código mais eficiente em tempo de execução.
EDIT2:
Então ... aparentemente, uma instrução switch é mais rápida e melhor que um monte de instruções if / else, porque uma comparação é logarítmica e outra é linear. link
Bem, minha abordagem favorita para substituir uma instrução switch enorme é por um dicionário (ou às vezes até uma matriz, se eu estiver ligando enums ou small ints) que está mapeando valores para funções que são chamadas em resposta a elas. Fazer isso obriga a pessoa a remover muitos spaghetti compartilhados, mas isso é bom. Uma declaração de switch grande geralmente é um pesadelo de manutenção. Então ... com arrays e dicionários, a pesquisa levará um tempo constante, e haverá pouca memória extra desperdiçada.
Ainda não estou convencido de que a declaração do switch seja melhor.