현재 내 게임 엔진에 대한 로그 작성 시스템입니다.지도 키로 문자열 대 해시 - 성능
모든 것을 명료하게 유지하려면 Logger 객체 각각에 이름을 지정해야합니다. Logger 객체는 모든 Logger 인스턴스를 추적하는 LogManager 클래스에 저장됩니다. 지도가 이름을 나타내는 std :: string을 사용하여 Logger 인스턴스에 대한 포인터를 저장하고 있습니다.
나는 latecny를 줄이는 것이 매우 중요하므로 실시간 3D 엔진을 개발 중입니다. 그래서 두 번째 방법으로 저장할 수 있습니다 - 빠른 해시 알고리즘 (예 : MurMur 해시 3)을 사용하고 문자열 대신 64 비트 해시 만 저장합니다.
그리고 지금, 내 질문 :지도 키 값을 런타임에 성능이 더 좋기 때문에 문자열 대신 해시를 사용하고 있습니까 (내 및 글로벌 경우)? @Edit 액세스 코드
std::map<std::string, CLogger*> map1;
std::map<QWORD, CLogger*> map2;
// access :
CLogger * logger = map1["root"];
CLogger * logger = map2[getHashedString("root")];
//
QWORD getHashedString(const std::string string)
{
QWORD val = 0;
hash_x64_128(string.c_str(), string.length(), 1234, &val);
return val;
}
알고리즘 위에서 사용
는 불평 해시 3 (https://code.google.com/p/smhasher/source/browse/branches/chandlerc_dev/MurmurHash3.cpp)
베스트 감사합니다.
이러한 로거에 액세스하는 것이 문제 였는지 프로필을 작성 했습니까? 아니면 해시와 문자열을 비교 했습니까? – Borgleader
@ Borgleader 1 000 000 000 반복 이상, 건식 테스트를했는데 액세스 시간의 차이는 약 70 초이지만 여전히 해시를 사용하는 것이 좋은 습관인지는 모르겠다. 그리고 네, 해시 대 문자열만을 프로파일했습니다. –