Прежде всего:
-
Я задаю этот вопрос просто для удовольствия и желаю учиться. Я должен признать, что я люблю возиться с микро-оптимизацией (хотя они никогда не приводили к значительному увеличению скорости в любом из моих событий).
-
Метод
DateTime.DayOfWeek
не является узким местом в любом моем приложении. -
И вряд ли это будет проблемой в любом другом. Если кто-то думает, что этот метод влияет на производительность его приложения, он должен подумать о Когда оптимизировать, а затем, он должен выполнить профилирование.
Декомпиляция класса DateTime
с помощью ILSpy, мы узнаем, как реализуется DateTime.DayOfWeek
:
[__DynamicallyInvokable]
public DayOfWeek DayOfWeek
{
[__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
get
{
return (DayOfWeek)((this.InternalTicks / 864000000000L + 1L) % 7L);
}
}
public long Ticks
{
[__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
get
{
return this.InternalTicks;
}
}
Этот метод выполняет следующие действия:
-
Тики, соответствующие текущему дню, делятся на существующее количество тиков в день.
-
Добавим 1 к предыдущему результату, чтобы остаток деления 7 находился между числами 0 и 6.
Это единственный способ рассчитать день недели?
Можно ли переопределить это для ускорения работы?