2015-03-27 1 views
2

В C++ и в Java я запускаю очень маленькие программы (простые программы, такие как рекурсия, с использованием последовательности фибоначчи и т. Д.), И иногда я проверю, сколько времени потребуется для выполнения небольшого количества кода, либо используя:Действительно ли время в небольших строках кода имеет значение при программировании?

< #include CTime> или с использованием System.nanoTime();

Но действительно ли имеет значение, будучи таким конкретным временем в таких небольших программах?

Должен ли я не беспокоиться об этих небольших временных различиях? или это хорошая практика, чтобы начать уделять особое внимание времени? С точки зрения того, насколько быстро мой код работает и какой метод является самым быстрым для почти когда-либо одного. Поскольку, когда я начинаю делать большие программы, я буду «подготовлен».

Я довольно новый программист, и я просто очень хочу знать, вступает ли это в хорошие привычки или какие-то вредные привычки.

Надеюсь, я разъяснил, о чем я прошу. Любые советы были бы замечательными, спасибо.

+4

«Мы должны забыть о небольшой эффективности, скажем, около 97% времени: преждевременная оптимизация - это корень всего зла, но мы не должны упускать наши возможности в этих критических 3%» Дональд Кнут – Bonifacio2

+0

* Мы * t знать, соответствует ли продолжительность вашей программы тому, кто ее использует. Однако, если один запуск вашего кода не занимает много времени, зацикливайте его. 1000 раз, 1000000 раз ... так что вы можете сказать, например. 1000 раз занимает 25 секунд = 1 раз занимает 25 мс. Поскольку измерение одного прогона - это просто мусор (он сильно варьируется) – deviantfan

+7

Вам больше не нужно писать четкий, понятный и удобный код. – NathanOliver

ответ

5

Если у вас еще нет «разговоров» о преждевременной оптимизации, то Wikipedia article довольно хорош. Цитата:

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

Трудно определить, действительно ли производительность этого фрагмента имеет значение без профилирования. Вы можете оптимизировать его, но если этот код на самом деле не является узким местом (что замедляет работу вашей программы), то его оптимизация практически не повлияет на производительность вашей общей производительности.

Мой совет: написать код, который четко указывает на свои намерения. Код, который легко читается, и легко понять другим программистам. Не усложняйте код путем микрооптимизации, если ваши инструменты профилирования не показывают, что код является частью узкого места. (Если код является частью критического пути, то, во всяком случае, продолжайте и оптимизируйте его. Убедитесь, что вы документируете, что вы делаете, и почему вы это делаете.)

+0

Большое спасибо за ваш ответ. Это имеет большой смысл и, казалось, более естественный подход. Думаю, это будет то, чему я научусь со временем. Я бы проголосовал за ваш комментарий ... но я еще не могу! Еще раз спасибо! – Grove101

3

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

Примеры алгоритмических оптимизаций включают использование карт на основе хеша вместо сравнения грубой силы, используя лучший алгоритм сортировки, чем сортировку пузырьков, перенос владения, а не создание копий и т. Д. Примеры микрооптимизаций включают использование значений, которые, как оказалось, остаются в правильном состоянии по предыдущему коду, считая до нуля, а не до константы, общий «быстрее X», чем у одной или двух строк код и т. д.

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

+0

Я предполагаю, что являюсь новичком-программистом, вы начинаете изучать что-то новое, тогда вы узнаете что-то новое, похожее, но более эффективное. Поэтому возникает вопрос: мы всегда ищем оптимизацию во всем? Спасибо за ваш ответ, это было очень полезно. – Grove101

+0

@ Grove101 В алгоритмах да. И в микро-оптимизации, где оптимизация также делает код более четким и лучше отражает намерение программиста. Но микро-оптимизации, которые просто повышают производительность микроскопически, нет. Практически всегда гораздо важнее, чтобы код был понятным и понятным и понятным. (И это также приводит к созданию более быстрого кода. То, что легко понять людям, также легко для компиляторов оптимизировать.) –

+0

Это имеет большое значение, спасибо. – Grove101

Смежные вопросы