我需要格式化一个宽字符串缓冲区的 FILETIME 值信息,并且配置提供了格式字符串。
我实际上在做什么:
Config 提供格式字符串:
L"{YYYY}-{MM}-{DD} {hh}:{mm}:{ss}.{mmm}"
将 FILETIME 转换为系统时间:
SYSTEMTIME stUTC;
FileTimeToSystemTime(&fileTime, &stUTC);
- 格式化字符串
fmt::format_to(std::back_inserter(buffer), strFormat,
fmt::arg(L"YYYY", stUTC.wYear),
fmt::arg(L"MM", stUTC.wMonth),
fmt::arg(L"DD", stUTC.wDay),
fmt::arg(L"hh", stUTC.wHour),
fmt::arg(L"mm", stUTC.wMinute),
fmt::arg(L"ss", stUTC.wSecond),
fmt::arg(L"mmm", stUTC.wMilliseconds));
我完全理解服务会带来成本 :) 但我的代码会调用此语句数百万次,并且明显存在性能损失(超过 6% 的 CPU 使用率)。
欢迎我为改进此代码所做的“任何事情”。
我看到 {fmt} 有时间 API 支持。不幸的是,它似乎无法格式化时间/日期的毫秒部分,并且需要一些从FILETIME
到std::time_t
...的转换工作
我应该忘记“自定义”格式字符串并为FILETIME
(或SYSTEMTIME
)类型提供自定义格式化程序吗?这会导致显着的性能提升吗?
我很感激你能提供的任何指导。