Leave a comment

Comments 9

yakov_sirotkin March 9 2007, 16:09:01 UTC
А ты не думал о том, что компилятор умеет оптимизировать лучше, чем ты?

Reply

alf_kadett March 9 2007, 16:22:50 UTC
+1

Reply

george_u March 9 2007, 16:27:59 UTC
Было бы странно, если бы я об этом не думал ;)

Меня просто смущает тот факт, что раз уж он такой умный - то зачем он не проинлайнил всё, что не лень в последнем варианте, и не получил в 2 раза более оптимальный код, нежели в первом случае...

Reply


yole March 9 2007, 16:26:43 UTC
Разница, например, в том, что в первоначальном варианте кода полностью съедаются проверки на array index out of bounds. В других двух вариантах их будет дофига.

Reply

george_u March 9 2007, 16:30:36 UTC
угу, и это тоже. Причём именно в этом случае так как node.Children приходит в таком виде из другой части проекта, устранить их написанием unsafe-кода не получится... (не взять указатель на node.Children)

Reply

george_u March 9 2007, 16:33:47 UTC
Я ещё писал ComplexEnumerable без обращения по индексу - с использованием исключительно интерфейсов IEnumerable - этот вариант чуть-чуть побыстрее третьего, но всё равно существенно медленнее первого, из-за большого количества отказывающихся инлайниться вызовов методов...

Reply


igorsereda March 9 2007, 16:47:34 UTC
:)

Лучшая оптимизация - устранение кода. Невыполнение кода занимает обычно существенно меньше времени. :)

Другими словами, такие вещи как обход дерева мы обычно оптимизируем или отсечением ветвей или прореживанием событий, которые этот обход вызывают. (Последнее, правда, чревато дополнительным стэйтом.)

Reply

george_u March 11 2007, 21:28:28 UTC
угу, умный в гору не пойдёт :-)
Любопытно, а какие деревья бывают в клиентах для трекеров?

Ещё один способ - попробовать проинлайнить всё вручную постпроцессингом IL-кода. Правда, он не решает проблему range checks.

Вообще ситуация заставляет задуматься над вопросом - почему такая важная для performance вещь, как директива forceinline есть только в "Microsoft'овских расширениях" языка С++...

Reply

igorsereda March 12 2007, 10:27:59 UTC
Q: какие деревья бывают в клиентах для трекеров?
A: Навигационные.

:)

Reply


Leave a comment

Up