Extensibilidade vs. Melhor Performance

Este post se deve à um email que recebi de um colega me perguntando se utilizar Reflection para instanciar as classes de nosso sistema/projeto não perdemos em performance. Não cheguei a fazer testes precisos sobre isso, mas matérias que eu já li a respeito, dizem que instanciar os objetos via Reflection é mesmo mais lento que invocar diretamente o objeto.

Claro que se tivessemos já conhecimento de todas as variações que poderemos vir a ter, não precisaríamos utilizar Reflection, fazendo simplesmente um Select … Case pelas nossas opções e assim instanciar a classe concreta correta através de nosso Factory Method.

Já se utilizarmos o Reflection, o nosso Factory Method ficaria mais ou menos como:

     Public Shared Function Create() As IAccount
          Dim path As String = GetConfigDAL()
          Return DirectCast(Assembly.Load(path).CreateInstance(path  & “.Account”), IAccount)
     End Function

E no código que instancia o objeto:

     Dim account As IAccount = MinhaDALFactory.Account.Create()

Queria mesmo colher opiniões, procurando saber de vossa parte qual é o mais interessante, ou seja, optar por uma melhor performance ou extensibilidade?

Nota 1: Os exemplos foram baseados no Microsoft Pet Shop 3.0, que foi desenvolvimento como um case-study da  Microsoft.

Nota 2: A Microsoft, neste case-study, levou em consideração tanto performance quanto extensibilidade (utilizando Reflection), e nem por isso a performance foi degradada.

Migrando para ASP.NET 2.0

Aqui é mostrado um artigo bem interessante no que diz respeito a migração de ASP.NET 1.x para ASP.NET 2.0. Pelo que pude perceber em fóruns que participo, o maior impacto no ASP.NET 2.0 tem sido causado pelo novo modelo de compilação que o mesmo, por default, cria múltiplos assemblies (arquivos *.dll) e desaparece com a pasta bin.