Выводы из одной дискуссии
От: Pavel Dvorkin Россия  
Дата: 31.10.05 09:16
Оценка: +4 -7 :)))
На мой взгляд, дискуссия, начатая здесь

http://www.rsdn.ru/Forum/Message.aspx?mid=1457243&only=1
Автор: VladD2
Дата: 27.10.05


еще раз показала, что истина конкретна, о чем я не раз уже заявлял, но, к сожалению, мои оппоненты этого услышать не хотели.

Обсуждать то, что делал VladD2 в своей ранней разработке — не буду. В молодости и не такие ошибки делаешь, мог бы и о своих порассказать...

Но вот результаты — обсудить стоит.

Так все же — можно ли читать из файла по одному байту ? Да или нет ? Стоит ли это оптимизировать ? Стоит ли это априорно оптимизировать ? Стоит ли это оптимизировать, если такая оптимизация скажется на дизайне и архитектуре не лучшим образом ?

Эксперименты, проведенные мной и другими , показали — чтение по одному байту замедляет работу в десятки раз. Сейчас, на Windows XP. Что там было во времена MS-DOS — обсуждать я не буду.

Следует ли из этого, что читать побайтно вообще нельзя ? Ни в коем случае!
Истина, как всегда, конкретна. Если предстоит читать из файла (а то и из консольного ввода) два десятка байтов несколько раз за жизненный цикл программы — да здесь хоть по байту читайте, хоть по полбайта . Потому что не скажется это никак ни на чем. И тот, кто здесь начнет оптимизировать, только время зря потратит.

Стоит ли все же это оптимизировать ? Во многих случаях — да. Истина, опять же конкретна. Если речь идет о чтении файлов размерами в Мб, и делается это многократно — обязательно. Потому что иначе вы просто получите ничем не оправданную потерю производительности. Бессмысленную потерю. И не надо мне говорить, что, дескать, потом профайлером обнаружим и исправим. Понять это и на стадии проектирования можно, если правильно задачу оценить. И переделывать здесь совсем незачем — надо просто сразу как следует сделать

Стоит ли это оптимизировать, если такая оптимизация скажется на дизайне и архитектуре не лучшим образом ?

Вот этот вопрос самый интересный. Скажется в данном случае или нет ? Вообще-то если логика задачи рассматривает входной поток как структуру "последовательность" — всякая попытка читать не побайтно есть нарушение этой абстракции, а, следовательно, и переход к некоторому ухудшению дизайна. Можно, конечно, скрыть это на определенном уровне, но все же некоторое нарушение идеи здесь есть. Не столь ясным дизайн будет, что ни говори, а это правда. И вот здесь мое мнение — это надо вытерпеть. Ради того, чтобы это потом нормально работало. Увы, не любое красивое и изящное решение является еще и практически применимым. Можно, конечно, при постройке дома рассуждать о пилястрах и колоннах, портиках и фасадах, но все же не мешало бы и о кирпичах и бетоне подумать. Иначе, простите, получив задание построить птицеферму, мы ей красивый фасад сделем в стиле барокко, только вот для кур там места не найдется

А чтобы такие ляпы не допускать — опыт нужен. И школа соответствующая. Проще говоря, надо еще во время учебы студентам объяснять, что делать надо как следует. Тогда они хоть понимать будут, что здесь почем. И стараться писать эффективно. Соответствующая культура у них будет. Вот этому я их и учу в меру своих способностей. А неэффективно писать они и без меня научатся

Выводы.

Я вовсе не призываю к оптимизации любой ценой. И те, кто меня в этом обвиняют — ломятся в открытую дверь.
Я призываю к неиспользованию заведомо неэффективных решений. Что, к сожалению, и будет иметь место, если программист элементарно не понимает, что здесь почем и относится к ресурсам как к бездонной бочке. А то, что это не так уж редко бывает — показывает исходный постинг. Если уж такой грамотный специалист, как VladD2 (говорю это без всякой иронии) допускает такие ляпы (и даже в этом я его не обвиняю, с кем не бывает), то что говорить о тех, кто только начинает!

В общем, я призываю думать. Думать, и искать наилучшее решение. И не сковывать себя при этом никакими шорами.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.