Быстрее получить год и месяц напрямую из COleDateTime или сначала преобразовать в SYSTEMTIME?

Я хочу получить год и месяц от объекта COleDateTime, и я хочу, чтобы он был максимально быстрым. У меня есть 2 варианта;

COleDateTime my_date_time;
int year = my_date_time.GetYear();
int month = my_date_time.GetMonth();

или же

COleDateTime my_date_time;
SYSTEMTIME mydt_as_systemtime;
my_date_time.GetAsSystemTime(mydt_as_systemtime);
int year = mydt_as_systemtime.wYear;
int month = mydt_as_systemtime.wMonth;

Вопрос в том, что будет быстрее?

COleDateTime хранит это внутреннее представление даты в виде DATE typedef и так при звонке GetYear() а также GetMonth() он должен рассчитывать их каждый раз. в SYSTEMTIME случай, значения wYear а также wMonth хранятся как DWORDs, так что это просто случай получения значений, но при преобразовании COleDateTime к SYSTEMTIME,

Спасибо,

Штеррен

1 ответ

Решение

Благодаря точке в правильном направлении @MarkRansom я разыскал исходный код для COleDateTime. Вот функции;

ATLCOMTIME_INLINE int COleDateTime::GetYear() const throw()
{
    SYSTEMTIME st;
    return GetAsSystemTime(st) ? st.wYear : error;
}

ATLCOMTIME_INLINE int COleDateTime::GetMonth() const throw()
{
    SYSTEMTIME st;
    return GetAsSystemTime(st) ? st.wMonth : error;
}

Так COleDateTime::GetYear() а также ::GetMonth() сделать преобразование в SYSTEMTIME тем не мение!

Поскольку это встроенные функции, они будут введены в действие на сайте вызова. поскольку GetAsSystemTime(st) является общим для этих функций, оптимизация компилятора должна вынести это во временную переменную, и поэтому два фрагмента кода в моем вопросе эквивалентны. Поскольку вариант 1 проще, нет причин не соглашаться с этим.


Обновить:

Как только у меня появилась возможность, я сравнил код. Похоже, что оптимизация компилятора, о которой я говорил, не относится к вышеупомянутому коду. Сроки для 1 миллиона операций любого способа следующие;

Прямые звонки: 154мс
СИСТЕМНЫЙ метод: 75 мс

Ну, это решает вопрос. Преобразование в SYSTEMTIME это.

Другие вопросы по тегам