2011-01-21 61 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. 通过重构改进代码的那些部分,改写,或者您选择

重复这些步骤,直到哟其它技术你的程序不再太慢。