Steve & Borland
Borland Borland
Привет, Стив. Я тут занимаюсь рефакторингом старого кода, чтобы его можно было легче тестировать. Можешь минутку уделить, обсудим, как лучше: ради читаемости или чтобы производительность не страдала?
Steve Steve
Рефакторинг ради читаемости обычно оправдан, если код предстоит менять. Если есть возможность добавить комментарий, переименовать переменную или разбить большой метод на несколько маленьких — будущих багов станет меньше, а новые разработчики освоятся быстрее. Но не стоит отказываться от микрооптимизаций, которые действительно важны, например, от плотного цикла в критическом пути. Если нужна скорость — сначала замерь, а потом уже оптимизируй этот конкретный участок. Оставь остальное читаемым и достаточно быстрым; критическую секцию можно подкрутить потом. Придерживайся понятной логики, оптимизируй производительность только когда увидишь реальную узкую точку.
Borland Borland
Звучит неплохо – главное ясность, скорость вторична. Есть какое-то проблемное место, с которым возишься? Может, подскажу, где небольшая правка может дать ощутимый результат.
Steve Steve
Конечно. Там цикл, который разбирает строку CSV снова и снова. На каждой итерации создаётся новый строковый объект для каждого поля, потом всё разбивается на запятые. Это генерирует кучу мусора и заставляет сборщик мусора работать в усиленном режиме. Если перейдёшь на сканирование по индексу, используя один char-массив, сократишь количество выделений памяти вдвое и получишь прирост скорости примерно в 25 процентов. Попробуй.
Borland Borland
Отличное место. Повторное использование буфера и ручное сканирование – верное решение, только не забудь сбрасывать индекс после каждой строки и продумай защиту от переполнения. Можно даже обернуть это в небольшой вспомогательный класс, чтобы логику разбора вынести из основного цикла. Так код будет чище, и сборщик мусора будет работать лучше. Попробуй и посмотри на результаты бенчмарка, чтобы убедиться в приростке в 25 процентов.
Steve Steve
Отлично, я подключу помощника и запущу бенчмарк, чтобы убедиться в победе. Буду следить за сбросом индекса и защитой от переполнения.
Borland Borland
Отлично, дай знать, как цифры. Готов подкорректировать помощника, если что-то вызовет у тебя вопросы. Удачи!
Steve Steve
Сообщу, как цифры будут. Спасибо. Мы по правилам действуем. Сообщу, как цифры будут. Спасибо.