【发布时间】:2014-11-11 14:20:07
【问题描述】:
我需要在可用的情况下使用新的 Windows 运行时功能,并在不存在新功能的情况下回退到旧的。
代码路径对性能至关重要。如果平台(Windows 8 / Windows Server 2012)提供,我需要调用GetSystemTimePreciseAsFileTime,如果新版本不存在,则回退到GetSystemTimeAsFileTime。
我知道我可以使用LoadLibrary 和GetProcAddress 来加载GetSystemTimePreciseAsFileTime,如果失败,请退回到GetSystemTimeAsFileTime。我担心通过另一层间接调用像这样对性能至关重要的东西对性能的影响。
是否有任何内置机制可以延迟加载符号,而不是整个 DLL?所以我可以在启动时测试 Windows 版本,并在 Win8 上调用使用 GetSystemTimePreciseAsFileTime 的函数,否则调用使用 GetSystemTimeAsFileTime 的函数,而不会导致整个可执行文件在旧 Windows 版本上因链接错误而失败?
或者我应该停止担心并使用GetProcAddress?
【问题讨论】:
-
我会说“别担心,使用 GetProcAddress”。额外的间接性可能非常小。
-
尝试进入 GetSystemTimeAsFileTime,一次使用 GetProcAddr,一次不使用,可能几乎没有区别。
-
没有“间接层”。否则,分析器或小型测试程序可以轻松向您展示。
-
您最多需要两次调用 GetProcAddress。为什么要担心在启动时执行了两次且不再运行的函数调用的性能?