mad_Max » 27.07.2004 (Вт) 17:26
Про тормоза With применительно к пользовательским типам я никогда не слышал, поэтому провел небольшой тест. Создал свой тип с тремя integer полями и дважды прогнал For'ом по 99999999 итераций (при меньшем количестве результат слишком нестабилен), присваивая полям случайные значения от 0 до 999. With использовался только во втором случае. Результат: 38,706 секунд без With, 37,654 с With на Athlon XP 1800+, так что вроде даже быстрее, но вот если With... End With поставить внутри цикла, то результат на 4,12 секунды хуже, чем без With. Но учитывая количество итераций и приблизительность теста, разница не очень значительная, надо ещё поискать случай, когда использование With с пользовательскими типами способно заметно затормозить прогу. Как правило, главный тормоз в DirectDraw-приложении - сам Blit, поэтому их количество надо стараться минимизировать. Еще один тормоз - рисование линий и прочих геометрических фигур, может даже покруче BltFast будет. Как-то попытался в своем движке отобразить маршрут линиями, так количество флипов в секунду упало в 2 раза (на том же Athlon'е). Иногда очень непросто сразу определить, где именно в алгоритме "узкое" место, поэтому я рекомендую делать замеры времени на выполнение основных процедур (Timer или DX.TickCount помогут) и разбираться с самыми тормозными. Подсчитай кстати еще и количество блитов за один кадр - может где-то перебор. У меня при разрешении 800x600 в среднем 500-1200 блитов, в основном небольшие картинки 64x47, так что если все-таки запустишь мой движок, и он заработает с удовлетворительной скоростью, то можно будет ориентироваться на эти показатели. Если нет, то не знаю, что еще можно придумать. Я не имел возможности проверить свою прогу на машине мендленнее вышеупомянутого Pentium 150Mhz, но хоть 10 кадров в секунду должна же она выжать.