在整個執行流程中被調用307次,其對象初始化耗時占到6.5%。
在程序進入構造函數函數體之前,類的父類對象和所有子成員變量對象已經被生成和構造。如果在構造函數體內位其執行賦值操作,顯示屬於浪費。如果在構造函數時已經知道如何為類的子成員變量初始化,那麼應該將這些初始化信息通過構造函數的初始化列表賦予子成員變量,而不是在構造函數函數體中進行這些初始化。因為進入構造函數函數體之前,這些子成員變量已經初始化過一次了。
在C++程序中,創建/銷毀對象是影響性能的一個非常突出的操作。首先,如果是從全局堆中生成對象,則需要首先進行動態內存分配操作。眾所周知,動態分配/回收在C/C++程序中一直都是非常耗時的。因為牽涉到尋找匹配大小的內存塊,找到後可能還需要截斷處理,然後還需要修改維護全局堆內存使用情況信息的鏈表等。
string Recordset::GetField(const string &strName) { int nIndex; if (hasIndex==false) { nIndex = m_nPos; } else { nIndex = m_vSort[m_nPos].m_iorder; } if (m_fields[strName]==0) { LOG_ERR("Recordset::GetField:"<<strName<<" Not Find!!"); } return m_records[nIndex].GetValue(m_fields[strName] - 1) ; }
string Recordset::GetField(const string &strName) { unordered_map::iterator iter = m_fields.find(strName); if (iter == m_fields.end()) { LOG_ERR("[Recordset::GetField] "<< strName <second - 1) ; }