首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >直接从COleDateTime获取年份和月份还是先转换为SYSTEMTIME更快?

直接从COleDateTime获取年份和月份还是先转换为SYSTEMTIME更快?
EN

Stack Overflow用户
提问于 2012-06-01 01:14:54
回答 1查看 1.3K关注 0票数 1

我希望从COleDateTime对象中获取年份和月份,并且希望它尽可能快。我有两个选择;

代码语言:javascript
复制
COleDateTime my_date_time;
int year = my_date_time.GetYear();
int month = my_date_time.GetMonth();

代码语言:javascript
复制
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类型定义,因此当您调用GetYear()GetMonth()时,它每次都必须计算这些值。在SYSTEMTIME的情况下,wYearwMonth的值被存储为DWORDs,因此这只是一个检索值的情况,但是在将COleDateTime转换为SYSTEMTIME时存在开销。

谢谢,

斯特伦

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-01 16:42:59

多亏了指向正确方向的@MarkRansom,我找到了COleDateTime的源代码。下面是函数;

代码语言:javascript
复制
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更简单,所以没有理由不使用它。

更新:

一旦有机会,我就对代码进行了基准测试。看起来我所说的编译器优化并不适用于上述代码。每种方法的100万次操作的时序如下;

直拨: 154ms

SYSTEMTIME方法: 75ms

好了,就这么定了。就是转换成SYSTEMTIME了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10838193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档