2011-01-21 32 views
0

所以我創建了一個可以將其數據轉換爲訂閱函數的圖元素的可編譯原型。如何優化這種簡單的數據(事件)投射類?

//You can compile it with no errors. 
#include <iostream> 
#include <vector> 

using namespace std ; 

class GraphElementPrototype { 

    // we should define prototype of functions that will be subscribers to our data 
    typedef void FuncCharPtr (char *) ; 

public: 
    //function for preparing class to work 
    void init() 
    { 
     sample = new char[5000]; 
    } 
    // function for adding subscribers functions 
    void add (FuncCharPtr* f) 
    { 
     FuncVec.push_back (f) ; 
    } ; 

    // function for data update 
    void call() 
    { 
     // here would have been useful code for data update 
     //... 
     castData(sample); 
    } ; 

    //clean up init 
    void clean() 
    { 
     delete[] sample; 
     sample = 0; 
    } 

private: 

    //private data object we use in "call" public class function 
    char* sample; 

    //Cast data to subscribers and clean up given pointer 
    void castData(char * data){ 
     for (size_t i = 0 ; i < FuncVec.size() ; i++){ 
      char * dataCopy = new char[strlen(data)]; 
      memcpy (dataCopy,data,strlen(data)); 
      FuncVec[i] (dataCopy) ;} 
    } 

    // vector to hold subscribed functions 
    vector<FuncCharPtr*> FuncVec ; 

} ; 


static void f0 (char * i) { cout << "f0" << endl; delete[] i; i=0; } 
static void f1 (char * i) { cout << "f1" << endl; delete[] i; i=0; } 

int main() { 
    GraphElementPrototype a ; 
    a.init(); 
    a.add (f0) ; 
    a.add (f1) ; 
    for (int i = 0; i<50000; i++) 
    { 
     a.call() ; 
    } 
    a.clean(); 
    cin.get(); 
} 

是否可以優化我的數據投射系統?如果是的話,該怎麼做?

+1

說「這個簡單的應用吃了我CPU的5%」沒什麼意義。運行需要多長時間?你有沒有對它進行分析以查看哪些部分特別昂貴?你知道你的表演熱點在哪裏嗎? (對於它的價值,你的代碼和它的手動資源管理看起來相當不安全。) – 2011-01-21 17:11:03

回答

5
  • 正確執行程序和安全
  • 如果性能不接受
    • 雖然不接受
      • 簡介
      • 優化
  • 完成!

根據我的經驗,不成熟的優化是魔鬼。

編輯:

顯然,當我格式化我的回答,另一個詹姆斯ninja'd我一個類似的答案。打的好。

4

是否可以優化我的數據投射系統?如果是的話,該怎麼做?

如果你的程序不是太慢,那麼就不需要執行優化。如果實在是太慢了,那麼一般情況下,提高其性能應該做的事,像這樣:

  1. 簡介程序
  2. 識別程序的,從中發現的部分是最昂貴的
  3. 選擇部分第2步那些可能成爲(相對)容易提高
  4. 通過重構改進代碼的那些部分,改寫,或者您選擇

重複這些步驟,直到喲其它技術你的程序不再太慢。