.NET jak widzę :].
On wywołuje akcje regularnie, ale zwróć uwagę na to, że timer pracuje jako osobny wątek w systemie i nawet jeśli wywołuje na czas metodę obsługi zdarzenia tick, to mija trochę czasu nim tekst zostanie dodany do listy.
Konkatenacja stringów wykonywana w mało efektywny sposób. Kiedy .NET łączy dwa stringi, nie robi tego dopisując jeden do drugiego, ale tworząc nowy string dla każdej pary. Lepszy efekt uzyskasz korzystając z klasy StringBuilder (ale tutaj jest stringów dość mało, więc nie powinien być to duży problem).
Poza tym kosztuje też obsługa samego mechanizmu zdarzeń.
Nie masz się czym przejmować, dziesięciomilisekundowe opóźnienie nie jest tutaj tragedią.
Kiedy potrzebujesz np. animować jakiś obiekt z prędkością 10px na sekundę nie polegaj na samym timerze. Licz odstęp czasu jaki minął od poprzedniego ticka i wykonuj przesunięcie w oparciu o tą wartość, posługując się podstawowymi wzorami z fizyki: s = t*v.
Najlepiej powiedz dokładniej co chcesz zrobić, bo możliwe, że taki niedokładny timer wystarczy i nie będzie trzeba nic więcej kombinować.