Jon Skeet has
an in-depth
explanation of how to improve the performance of code that
needs to dynamically invoke methods through reflections.

The bottom line is that if you have performance sensitive
code that needs to invoke methods that you fetch from
reflection, you should avoid using MethodInfo.Invoke() and
instead create a delegate from the MethodInfo, and perform the
invocations that way:

[...]Using a delegate invocation is only about 10% slower than
direct invocation, whereas using reflection takes over 600
times as long. Of course these figures will depend on the
method being called - if the direct invocation can be inlined,
I'd expect that to make a significant difference in some
cases.

This is a well-known trick, but Jon provides a great
exploration of the subject.

Protocol Buffers for .NET

There are currently three separate approaches to support
Protocol Buffers in .NET. Jon's effort essentially mimics the
existing support for C# and integrated with the Google
implementation and compilers. The other efforts have taken
slightly different approaches, one of them is designed with
the WCF approach in mind: use C# classes/interfaces as the
actual public contract, as opposed to the .proto files.