Я задаю этот вопрос просто для развлечения и желания учиться. Должен признаться, я люблю возиться с микрооптимизациями (хотя они никогда не приводили к какому-либо значительному увеличению скорости ни в одной из моих разработок).
Метод DateTime.DayOfWeek не является узким местом ни в одном моем приложении.
И это em>крайне маловероятно, что это будет проблемой в любом другом случае. Если кто-то думает, что этот метод влияет на производительность его приложения,
он должен подумать о том, когда оптимизировать, а затем выполнить профилирование.
Декомпилируя класс DateTime с помощью ILSpy, мы узнаем, как реализован DateTime.DayOfWeek:
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.
Это единственный способ вычислить день недели?
Можно ли переопределить это, чтобы ускорить работу?
[b]Прежде всего:[/b] [list] [*]Я задаю этот вопрос просто для развлечения и желания учиться. Должен признаться, я люблю возиться с микрооптимизациями (хотя они никогда не приводили к какому-либо значительному увеличению скорости ни в одной из моих разработок).
[*]Метод DateTime.DayOfWeek не является узким местом ни в одном моем приложении.
[*]И это em>крайне маловероятно, что это будет проблемой в любом другом случае. Если кто-то думает, что этот метод влияет на производительность его приложения, он должен подумать о том, когда оптимизировать, а затем выполнить профилирование. [/list] Декомпилируя класс DateTime с помощью ILSpy, мы узнаем, как реализован DateTime.DayOfWeek: [code]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; } } [/code] Этот метод выполняет следующее: [list] [*]Тики, соответствующие текущему дню, делятся на существующие количество тиков в день.
[*]К предыдущему результату прибавляем 1, чтобы остаток от деления 7 находился между числами 0 и 6.
[/list] Это единственный способ вычислить день недели? Можно ли переопределить это, чтобы ускорить работу?