如何优化这种简单的数据(事件)铸造类?

时间:2011-01-21 17:06:58

标签: c++ events casting char

所以我为图元素创建了可编译原型,可以将其数据转换为订阅函数。

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

是否可以优化我的数据投射系统?如果是的话怎么做?

2 个答案:

答案 0 :(得分:5)

  • 正确,安全地实施计划
  • 如果表现不可接受
    • 虽然不可接受
      • 资料
      • 优化
  • 完成!

根据我的经验,过早优化是魔鬼。

编辑:

显然,当我格式化我的答案时,另一位詹姆斯忍者给了我类似的答案。好好玩。

答案 1 :(得分:4)

  

是否可以优化我的数据投射系统?如果是的话怎么做?

如果您的程序不是太慢,则无需执行优化。如果它太慢,那么一般来说,应该像这样改进其性能:

  1. 描述您的计划
  2. 确定程序中最昂贵的部分
  3. 从步骤2中找到的部分中选择可能(相对)易于改进的部分
  4. 通过重构,重写或您选择的其他技术改进代码的这些部分
  5. 重复这些步骤,直到程序不再太慢。