我正在使用:
bool GetOS(LPTSTR pszOS)
{
OSVERSIONINFOEX osve;
BOOL bOsVersionInfoEx;
ZeroMemory(&osve, sizeof(OSVERSIONINFOEX));
osve.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osve)) )
return false;
TCHAR buf[80];
StringCchPrintf( buf, 80, TEXT("%u.%u.%u.%u"),
osve.dwPlatformId,
osve.dwMajorVersion,
osve.dwMinorVersion,
osve.dwBuildNumber);
StringCchCat(pszOS, BUFSIZE, buf);
return true;
}
获取Windows版本,我计划每隔几分钟使用 pszOS ,
我应该每次使用 pszOS 作为全局var还是调用GetOS()?
从表现的角度来看,最佳选择是什么。
答案 0 :(得分:2)
从表现的角度来看,最佳选择是什么。
即使函数为空,使用变量也比函数调用更有效。只需确保在拥有单个线程时初始化此变量,然后不要更改它。
这真的很重要吗?
从提供的信息来看,很难说,但这种运行速度非常快非常重要吗?你经常使用它吗?特别是在多线程环境中进行函数调用更安全。如果您不确定这是程序中的瓶颈,请不要过早优化。以最安全的方式编写代码。
答案 1 :(得分:2)
你总是可以缓存结果:
bool GetOS(LPTSTR pszOS)
{
static bool has_cached = false;
static bool result = false;
static TCHAR buf[80];
if(!has_cached)
{
has_cached = true;
OSVERSIONINFOEX osve;
BOOL bOsVersionInfoEx;
ZeroMemory(&osve, sizeof(OSVERSIONINFOEX));
osve.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osve)) )
{
result = false;
}
else
{
StringCchPrintf( buf, 80, TEXT("%u.%u.%u.%u"),
osve.dwPlatformId,
osve.dwMajorVersion,
osve.dwMinorVersion,
osve.dwBuildNumber);
result = true;
}
}
if(result)
StringCchCat(pszOS, BUFSIZE, buf);
return result;
}
这样您只需计算一次,但您可以将逻辑和初始化保存在一个地方。缓存变量的静态范围还确保只有此过程才能访问变量,因此它使它比常规全局变量更安全一些。我只缓存布尔结果,如果需要缓存更多信息,只需添加更多静态变量。