У меня есть библиотека классов, которая полна типичных методов, которые я часто использую, особенно в своей области. На данный момент большая часть этой библиотеки остается неизменной в течение многих лет. Больше добавлений, чем изменений.
В библиотеке есть много вызывающих методов внутри библиотеки - использующих себя.
С точки зрения полной оптимизации - потому что эта библиотека используется много, что делает больше смысла:
Используйте методы в lib или , переписывайте код внутри каждого метода , чтобы избежать вызова в другой метод. Какова стоимость вызова другого метода или, может быть, двух методов в глубину по сравнению с наличием кода в вызываемом методе.
Например, это иллюстрирует общий сценарий. Этот метод превращает то, что обычно является уродливым параметром URL (с кодированным html), в более простую, взломанную дату с тире. Таким образом, сотни пользователей могут вызывать его сотни раз, может быть, тысячи на странице (может быть, это не тривиальное количество раз?).
Причина, по которой я не думаю, что это предварительная оптимизация или микрооптимизация (поэтому я и спрашиваю), заключается в том, что, поскольку это библиотека, она используется многими приложениями на одном сервере с Для сотен пользователей «микро» экономия может действительно возрасти.
string GeturlDate(this DateTime date)
{
return date.GetUrlDate(date, "-");
}
string GetUrlDate(this DateTime date, string delimiter)
{
return DateHelper.GetUrlDate(date, delimiter);
}
string DateHelper.GetUrlDate(DateTime date, string delimiter)
{
return string.format("{0}-{1}-{2}", date...);
}
В этом случае последний метод с помощью string.format может быть выполнен непосредственно в каждом из методов. Избегайте самого верхнего метода, в который входят два метода. Первые два - это методы расширения, а последний - прямой вызов.
Давайте пропустим опции перегрузки (это используется). И хотя вышесказанное, несомненно, лучше для обслуживания - последний фрагмент кода находится в одном месте, насколько он будет более эффективным. IL уже встроен, потому что он знает? Разве все это обрабатывается компилятором и в действительности не перебирает методы, как можно подумать?
Для сложных функций, которые могут легко привести к ошибкам, я бы оставил одно место.
РЕДАКТИРОВАТЬ : Для разъяснения концепции микрооптимизации и почему я думаю, что думать об этих вещах является правильным.
- Часто вы не знаете, что у вас проблемы с производительностью - это не значит, что их нет - или тот, который только поднимает голову при определенных условиях
- Есть случаи, когда микрооптимизация используется слишком быстро, потому что «это то, как я всегда делал это, и это работает (и нет никаких проблем), вместо того, чтобы подумать:« есть ли лучший способ сделать это »(возможно, при определенных условиях условия)
- Маленькие победы имеют значение для горячих путей. Изменение, которое приводит к улучшению на 100 нс или к меньшему потреблению памяти, с коэффициентом 1К, 100К или 1М, может привести к заметной разнице.
Я думаю, что если знание того, что написание кода определенным образом может привести к лучшему «х», то это правильное соображение и, возможно, реализация (особенно если вы делаете это в первый раз, а не рефакторинг) .
В конечном счете, ответы на этот вопрос показывают, что помимо прочего, что делает компилятор и как написан сам BCL, нет причин для изменений.
Что является хорошей новостью: )