MFCのSerialize,Desirialize part.2 CStringArrayにて
CMapの要素にCStringArrayが良かったのですが、なかなか出来なかったので、 とりあえずCStringArrayのみでやってみました。
CStringArrayのnew/deleteはちゃんと出来ていなのでご注意ください。
void Initialize() { clock_t start, finish; double duration; start = clock(); m_stringarray = new CStringArray[500000]; for (int i = 0; i < 500000; i++) { CString str; str.Format(_T("item:%d %d\r\n"), i, 0); m_stringarray->Add(str); } finish = clock(); duration = (double)(finish - start) / CLOCKS_PER_SEC; TRACE(_T("map initialized --- %2.3f seconds\n"), duration); } void Serialize() { clock_t start, finish; double duration; start = clock(); CFile cFileG; if (cFileG.Open(_T("SampleFile.txt"), CFile::modeCreate | CFile::modeWrite)) { CArchive cArchiveObj(&cFileG, CArchive::store); m_stringarray->Serialize(cArchiveObj); } finish = clock(); duration = (double)(finish - start) / CLOCKS_PER_SEC; TRACE(_T("map serialized --- %2.3f seconds\n"), duration); } void Deserialize() { clock_t start, finish; double duration; start = clock(); CFile cFileG; m_stringarray = new CStringArray[500000]; if (cFileG.Open(_T("SampleFile.txt"), CFile::modeRead )) { CArchive cArchiveObj(&cFileG, CArchive::load); m_stringarray->Serialize(cArchiveObj); } finish = clock(); duration = (double)(finish - start) / CLOCKS_PER_SEC; TRACE(_T("map loaded --- %2.3f seconds\n"), duration); for (int i = 0; i < m_stringarray->GetSize(); i++) { auto arr = m_stringarray->GetAt(i); TRACE(_T("map element string array --- %s \n"), arr); } }