In general, the difference is that virtual methods are called using Opcode Callvirt, while non-virtual methods use the standard Opcode call. Opcodes are certainly faster than Callvirt, but I have never seen them nearly significant enough to warrant decision making based on this.
Premature optimization is the root of all evil.
source share