Ich habe 100.000 Std :: Strings in der Form YYYYMMDD.HHMMSS, z. "20160621.213500", die ich brauche, um eine Struktur mit einigen Werten, einschließlich eines Epochenzeitstempels, zu analysieren und zu füllen.Langsame mktime beim Analysieren 100.000 YYYYMMDD.HHMMSS Zeichenfolgen in C/C++
Es läuft sehr langsam und der Schuldige ist der Anruf zu mktime. Irgendeine Alternative, um dies zu beschleunigen?
#define STRNCPY(dest, src, len) \
{ memcpy((dest), (src), (len)) ; dest[(len)] = '\0'; }
void
DvStorUtils::parseDateTimeString(const char *dateTimeStr, TDateTime &dateTime)
{
// New, C-Style implementation
strcpy(dateTime.dateTimeStr, dateTimeStr);
char buf[32];
STRNCPY(buf, dateTimeStr, 4); dateTime.year = atoi(buf);
STRNCPY(buf, dateTimeStr+ 4, 2); dateTime.month = atoi(buf);
STRNCPY(buf, dateTimeStr+ 6, 2); dateTime.day = atoi(buf);
STRNCPY(buf, dateTimeStr+ 9, 2); dateTime.hour = atoi(buf);
STRNCPY(buf, dateTimeStr+11, 2); dateTime.minute = atoi(buf);
STRNCPY(buf, dateTimeStr+13, 2); dateTime.second = atoi(buf);
struct tm tmStruct;
tmStruct.tm_year = dateTime.year - 1900;
tmStruct.tm_mon = dateTime.month-1;
tmStruct.tm_mday = dateTime.day;
tmStruct.tm_hour = dateTime.hour;
tmStruct.tm_min = dateTime.minute;
tmStruct.tm_sec = dateTime.second;
dateTime.totalSecElapsed = mktime(&tmStruct);
}
Dieser Blogeintrag könnte von Interesse sein: https://gmbabar.wordpress.com/2010/12/01/mktime-slow-use-custom-function/ –
Wie langsam ist langsam? Welcher Teil der gesamten Funktion ist der 'mktime()' Aufruf? – wilx
Vielleicht könnten Sie die Arbeitslast zwischen Threads aufteilen? – wilx