На мой взгляд, дискуссия, начатая здесь
http://www.rsdn.ru/Forum/Message.aspx?mid=1457243&only=1Автор: VladD2
Дата: 27.10.05
еще раз показала, что истина конкретна, о чем я не раз уже заявлял, но, к сожалению, мои оппоненты этого услышать не хотели.
Обсуждать то, что делал VladD2 в своей ранней разработке — не буду. В молодости и не такие ошибки делаешь, мог бы и о своих порассказать...
Но вот результаты — обсудить стоит.
Так все же — можно ли читать из файла по одному байту ? Да или нет ? Стоит ли это оптимизировать ? Стоит ли это
априорно оптимизировать ?
Стоит ли это оптимизировать, если такая оптимизация скажется на дизайне и архитектуре не лучшим образом ?
Эксперименты, проведенные мной и другими , показали — чтение по одному байту замедляет работу в десятки раз. Сейчас, на Windows XP. Что там было во времена MS-DOS — обсуждать я не буду.
Следует ли из этого, что читать побайтно
вообще нельзя ? Ни в коем случае!
Истина, как всегда, конкретна. Если предстоит читать из файла (а то и из консольного ввода) два десятка байтов несколько раз за жизненный цикл программы — да здесь хоть по байту читайте, хоть по полбайта
. Потому что не скажется это никак ни на чем. И тот, кто здесь начнет оптимизировать, только время зря потратит.
Стоит ли все же это оптимизировать ? Во многих случаях — да. Истина, опять же конкретна. Если речь идет о чтении файлов размерами в Мб, и делается это многократно — обязательно. Потому что иначе вы просто получите ничем не оправданную потерю производительности. Бессмысленную потерю. И не надо мне говорить, что, дескать, потом профайлером обнаружим и исправим. Понять это и на стадии проектирования можно, если правильно задачу оценить. И переделывать здесь совсем незачем — надо просто сразу как следует сделать
Стоит ли это оптимизировать, если такая оптимизация скажется на дизайне и архитектуре не лучшим образом ?
Вот этот вопрос самый интересный. Скажется в данном случае или нет ? Вообще-то если логика задачи рассматривает входной поток как структуру "последовательность" — всякая попытка читать не побайтно есть нарушение этой абстракции, а, следовательно, и переход к некоторому ухудшению дизайна. Можно, конечно, скрыть это на определенном уровне, но все же некоторое нарушение идеи здесь есть. Не столь ясным дизайн будет, что ни говори, а это правда. И вот здесь мое мнение — это надо вытерпеть. Ради того, чтобы это потом нормально работало. Увы, не любое красивое и изящное решение является еще и практически применимым. Можно, конечно, при постройке дома рассуждать о пилястрах и колоннах, портиках и фасадах, но все же не мешало бы и о кирпичах и бетоне подумать. Иначе, простите, получив задание построить птицеферму, мы ей красивый фасад сделем в стиле барокко, только вот для кур там места не найдется
А чтобы такие ляпы не допускать — опыт нужен. И школа соответствующая. Проще говоря, надо еще во время учебы студентам объяснять, что делать надо
как следует. Тогда они хоть понимать будут, что здесь почем. И стараться писать эффективно. Соответствующая культура у них будет. Вот этому я их и учу в меру своих способностей. А неэффективно писать они и без меня научатся
Выводы.
Я вовсе не призываю к оптимизации любой ценой. И те, кто меня в этом обвиняют — ломятся в открытую дверь.
Я призываю к неиспользованию заведомо неэффективных решений. Что, к сожалению, и будет иметь место, если программист элементарно не понимает, что здесь почем и относится к ресурсам как к бездонной бочке. А то, что это не так уж редко бывает — показывает исходный постинг. Если уж такой грамотный специалист, как VladD2 (говорю это без всякой иронии) допускает такие ляпы (и даже в этом я его не обвиняю, с кем не бывает), то что говорить о тех, кто только начинает!
В общем, я призываю
думать. Думать, и искать наилучшее решение. И не сковывать себя при этом никакими шорами.