程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++的性能優化實踐

C++的性能優化實踐

編輯:C++入門知識



1 Gprof





實踐

1.初始化大對象耗時

在整個執行流程中被調用307次,其對象初始化耗時占到6.5%。
在程序進入構造函數函數體之前,類的父類對象和所有子成員變量對象已經被生成和構造。如果在構造函數體內位其執行賦值操作,顯示屬於浪費。如果在構造函數時已經知道如何為類的子成員變量初始化,那麼應該將這些初始化信息通過構造函數的初始化列表賦予子成員變量,而不是在構造函數函數體中進行這些初始化。因為進入構造函數函數體之前,這些子成員變量已經初始化過一次了。 在C++程序中,創建/銷毀對象是影響性能的一個非常突出的操作。首先,如果是從全局堆中生成對象,則需要首先進行動態內存分配操作。眾所周知,動態分配/回收在C/C++程序中一直都是非常耗時的。因為牽涉到尋找匹配大小的內存塊,找到後可能還需要截斷處理,然後還需要修改維護全局堆內存使用情況信息的鏈表等。

2.Map使用不當






    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) ;
}








  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved