Von MSIL-Code-Seite her gesehn sollten die statischen Funktionen "sparender" sein, vorallem für den GC.
Während bei einer Funktion mit einer Instanz immer erst das Objekt auf den Stack geladen wird bevor CallVirt aufgerufen wird, reicht beim statischen Objekt ein einfaches Call.
Object.Dispose() wird aufgerufen sobald die Instanz nicht mehr gebraucht wird, vorallem bei lokalen Variablen ist das der Fall, also wenn eine Instanz innerhalb einer Scope erzeugt wird. Sobald die Scope wieder verlassen wird, wird das Objekt gelöscht.
Die reine Funktion bleibt allerdings weiterhin im Speicher, in ihrer geJITTeten Form (in ASM-Code quasi). Also ist es egal ob Du die Funktion aus einer neuen Instanz oder statisch aufrufst, sie ist schon vorcompiled im Speicher und bleibt das auch. Also nix mit zumüllen etc ;-)
Greez