CArray與CMap寫及查詢資料比較
寫16W個指標資料,Key值為字串,值為指標,時間秒
寫: 寫記錄數 時間 查詢次數 時間
CArray: 16W 1 1000 7
1個Map: 16W 32 1000 1
2個Map: 16W 8 1000 1
8個Map: 16W 3 1000 1
16個Map: 16W 1.5 1000 1
順序迭代10000次,16個Map,每個Map 1W個物件 44秒
程式碼:
CString str1 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
CArray<Elbow*> mEArray;
for ( int i=0; i<160000; i++ )
{
Elbow* pElbo = new Elbow();
pElbo->SetUserItemName( _T("放棄吧熱壓彎頭放棄吧熱壓彎頭放棄吧熱壓彎頭放棄吧熱壓彎頭放棄吧熱壓彎頭") );
mEArray.Add( pElbo );
}
CString str2 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
AfxMessageBox( _T("Array寫資料") + str1 + _T(";") + str2 );
str1 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
CString strName;
for ( int ii=0; ii<1000; ii++ )
{
for ( int i=0; i<160000;i++ )
{
Elbow* pElbo = mEArray.GetAt(i);
strName = pElbo->GetUserItemName();
if ( strName == _T("dsfsd"))
{
}
// if ( pElbo->GetUserItemName() == _T("dsfs1"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd2"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd3"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd4"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd5"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd6"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd"))
// {
//
// }
// if ( pElbo->GetUserItemName() == _T("dsfsd"))
// {
//
// }
}
}
str2 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
AfxMessageBox( _T("Array查1000次資料") +str1 + _T(";") + str2 );
str1 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
AcDbLine
CArray< multimap<Elbow*,Elbow*>*,multimap<Elbow*,Elbow*>*> mMapArray;
//UEMap<CString,CString,Elbow*,Elbow*> mEMap;
//UEMap<CString,CString,Elbow*,Elbow*> mEMap;
//UEMap<CString,CString,Elbow*,Elbow*> mEMap1;
// UEMap<CString,CString,Elbow*,Elbow*> mEMap2;
//UEMap<CString,CString,Elbow*,Elbow*> mEMap3;
CString strError;
AcGePoint3d mPoint3D;
int iTmp = 10000;
std::multimap<Elbow*,Elbow*>* pEMap = new multimap<Elbow*,Elbow*>;
mMapArray.Add( pEMap );
for ( int i=0; i<160000; i++ )
{
if ( pEMap->size() == iTmp )
{
pEMap = new multimap<Elbow*,Elbow*>;
mMapArray.Add( pEMap );
}
mPoint3D.x = mPoint3D.x + 1;
strError.Format( _T("%.2f,%.2f,%.2f"),mPoint3D.x,mPoint3D.y,mPoint3D.z );
Elbow* pElbo = new Elbow();
pEMap->insert( make_pair( pElbo , pElbo ) );
}
str2 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
AfxMessageBox( _T("Map寫資料") + str1 + _T(";") + str2 );
str1 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
int iCount = mMapArray.GetCount();
Elbow* pTmpElbo = NULL;
for ( int ii=0; ii<10000; ii++ )
{
for ( int i=0; i<iCount; i++ )
{
multimap<Elbow*,Elbow*>* pEMap = NULL;
pEMap = mMapArray.GetAt(i);
pEMap->find( pTmpElbo ) ;
}
}
str2 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
AfxMessageBox( _T("Map查10000資料") +str1 + _T(";") + str2 );
/*
str1 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
//Elbow* pTmpElbo = NULL;
for ( int ii=0; ii<1000; ii++ )
{
for ( int i=0; i<iCount; i++ )
{
multimap<Elbow*,Elbow*>* pEMap = NULL;
pEMap = mMapArray.GetAt(i);
POSITION pos = pEMap->begin();
while( pos )
{
pEMap->GetNextAssoc( pos,pTmpElbo,pTmpElbo );
}
}
}
str2 = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
AfxMessageBox( _T("Map迭代一次資料") +str1 + _T(";") + str2 );
*/