У меня есть функция, которую я использую для добавления векторов, как это:Почему это невозможно оптимизировать?
public static Vector AddVector(Vector v1, Vector v2)
{
return new Vector(
v1.X + v2.X,
v1.Y + v2.Y,
v1.Z + v2.Z);
}
Не очень интересно. Однако я перегружаю оператор «+» для векторов, а в перегрузке я вызываю функцию AddVector, чтобы избежать дублирования кода. Мне было любопытно, приведет ли это к двум вызовам метода или будет оптимизирована при компиляции или времени JIT. Я узнал, что это привело к двум вызовам метода, потому что мне удалось получить 10% в всего за счет дублирования кода AddVector, а также метода точечного продукта в методах перегрузки оператора «+» и «*». Конечно, это нишевой случай, потому что их называют десятками тысяч раз в секунду, но я этого не ожидал. Думаю, я ожидал, что метод будет встроен в другой или что-то еще. И я полагаю, что это не просто накладные расходы на вызов метода, но и копирование аргументов метода в другой метод (они являются структурами).
Это не имеет большого значения, я могу просто дублировать код (или, возможно, просто удалить метод AddVector, так как я никогда не называю его напрямую), но в будущем я буду много называть меня, когда я решаю создать метод для чего-то, например, разделение большого метода на несколько более мелких.
http://www.codinghorror.com/blog/archives/001218.html – kd7
микро-оптимизация? –
99% времени, так как даже улучшение производительности на 10% в этом случае незначительно (встроенные вызовы метода VS 2). Какова была ваша абсолютная производительность? Я угадываю несколько MS в лучшем случае. См. Http://www.codinghorror.com/blog/archives/001218.html для примера. Не могу ответить на вопрос, хотя, извините. – James