Ono zpomalení .NETu je dost diskutabilní, zrovna v tomhle případě bude naprosto minimální, protože se jedná o jednu maličkou metodu. Tím pádem ji JIT zkompiluje a navíc bude mít dost času, takže udělá i hodně optimalizací (odhad). Režie .NETu se projeví daleko více na jiných místech, které tady nemáme.
To, že je to okénková aplikace, zase taky tolik nezpomaluje, čas strávený systémem prací s okny je naprostý zlomek času, který aplikace stráví počítáním. To jsou naprosto zanedbatelné faktory.
Co je ovšem daleko větší diletantnství autora, že při každém počítání MD5ky vytváří nový StringBuilder, a to naprosto zbytečně. Může krásně použít ten starý, navíc v případě, že jsou všechny stringy stejně dlouhé. V běžných situacích tyhle věci nemá smysl řešit, protože jestli vytvořím jeden nebo sto objektů, je celkem jedno. v tomhle případě, kdy se metoda spouští milionkrát, to ale smysl řešit opravdu má. Není radno zapomínat, že vytvoření StringBuilderu alokuje nějaký buffer, kam pak stringy cpe. Když použijeme ten starý, nic nového již nealokujeme.
Další neschopností autora je i v tak krátké ukázce kódu ohlídat si překlepy. Pojmenovat proměnnou lenght místo length se sice jeví jako prkotina, ale zrovna tento překlep je dost nešťastný a svědčí o tom, že autor nemá jasno, kde se píše TH a kde HT - je Length, ale Height.
Mimochodem vysvětlení, jak je to s těmi kolizemi, by také mohlo být trochu méně odfláklé. Věta "Jako uživatel tedy mohu mít jistotu, že po transformaci sekvence X dostanu výsledek Y a neexistuje žádná jiná sekvence bajtů, se kterou bych dostal stejný výsledek Y." je naprostý nesmysl. I když je tam napsáno "jako uživatel", jistotu nikdy nemám, mám pouze skoro jistotu.