Что лучше использовать для исключения выходного сообщения при динамической генерации String или StringBuilder или StringBuffer? - PullRequest
0 голосов
/ 12 марта 2010

Что лучше использовать для исключения выходного сообщения при динамической генерации String или StringBuilder или StringBuffer?

Ответы [ 2 ]

7 голосов
/ 12 марта 2010

StringBuffer в основном заменен на StringBuilder, что быстрее, потому что оно не синхронизировано. String хорошо, если вы не делаете много конкатенации.

Так как вы спрашиваете об этом в контексте Exception генерации сообщений, я бы сказал, оставьте это простым и используйте String. Хорошо спроектированные системы не должны генерировать Exception так часто, что преимущество в производительности StringBuilder / StringBuffer имеет значение.

То есть частота исключений должна быть достаточно низкой, чтобы способ создания подробного сообщения мало влиял на общую производительность. «Преждевременная оптимизация - корень всего зла». Оптимизируйте только те разделы, которые нуждаются в этом, на основе профилирования.

Если ваш код тратит значительное количество времени, которое динамически генерируется String для Exception, то что-то действительно не так с вашим дизайном. Оптимизация этой части процесса не принесет много пользы, потому что исключения в любом случае обходятся дорого (например, часть захвата трассировки стека).

0 голосов
/ 12 марта 2010

Либо String, либо StringBuilder в порядке - в зависимости от того, что делает код наиболее читабельным. (Это не тот код, который вы ожидаете выполнять часто, и, по-видимому, он не включает длинные циклы или глубокую рекурсию.)

StringBuffer не требуется, если к нему не будет доступа из нескольких потоков - и если вы пишете многопоточный генератор сообщений об исключениях, вам не нужна моя помощь, и я также хотел бы, чтобы вы остались далеко. :)

В зависимости от того, что вы помещаете в эти сообщения, и что вы планируете делать с ним, рассмотрите возможность подкласса Exception таким образом, который включает отдельные поля для отдельных битов информации. Например, Java 7 NIO InvalidPathException принимает три аргумента: исходный неверный ввод, причина неправильного ввода и индекс ошибки - достаточно, чтобы можно было создать подробную, хорошо отформатированную ошибку дисплей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...