Замечания по поводу оригинального кода:
Поле m_Visitors не является потокобезопасным. В текущей реализации возможны гонки данных при одновременном доступе из нескольких потоков.
Из-за DateTime.Now метод неудобно тестировать.
Обработка исключений: throw e не сохраняет трассировку стека.
string age не используется.
По поводу производительности можно использовать stringbuilder, но на самом деле разница настолько мала, что это не имеет большого значения.
Мое решение в папке Interview/Greeter.cs