Это разумный вопрос, но почти все проблемы с производительностью, которые я видел, особенно в Java и C #, сводились к:
- слишком много слоев абстракции и
- опора на кодирование в стиле уведомлений на основе событий.
, которые не имеют ничего общего с основными операциями.
Проблема с абстракцией в том, что до тех пор, пока рабочая нагрузка не станет большой, это нормально. Каждый уровень обычно требует небольшого снижения производительности, и они накапливаются сложным образом. На этом этапе вы начинаете нуждаться в обходных решениях. (Я думаю, что StringBuilder является примером такого обходного пути.)
Проблема с кодированием в стиле уведомлений на основе событий (в отличие от более простых структур данных, поддерживаемых периодическим процессом) состоит в том, что то, что может показаться простым действием, например установление свойства в значение, может привести к пульсации эффект от действий по всей структуре данных, выполняющий гораздо больше, чем можно было ожидать.