Обычно синглтон подавляет производительность больше всего на свете. Это означает, что у вас есть , чтобы обернуть класс в блокировки и синхронизацию в многопоточном приложении. Этого, возможно, можно было бы избежать, если бы не использовались синглтоны или глобалы.
Так что синглтон может быть медленнее, но я не могу вспомнить ни одной ситуации, когда он был бы быстрее.
Если вы хотите, чтобы ваше приложение совместно использовало один экземпляр объекта, тогда передайте ссылки на этот объект. Это также дает вам гибкость для изменения дизайна позже, когда выясняется, что по причинам кэширования или параллелизма использование нескольких отдельных экземпляров было бы на самом деле быстрее.
Самое главное, что нужно помнить о производительности, - это то, что ее трудно предсказать. Независимо от того, что вы думаете, ваше узкое место, вы почти наверняка ошибаетесь. Поэтому лучший способ обеспечить хорошую производительность - это легко модифицировать вашу программу. Синглтоны работают против тебя там. Если у вас есть синглтон, его практически невозможно удалить. Вы застряли с одним универсальным экземпляром класса, даже если несколько экземпляров работали бы лучше, даже если бы локальные переменные вместо глобального синглтона улучшили бы использование кэша.