Как оптимизировать такой простой класс данных (событий) приведения? - PullRequest
0 голосов
/ 21 января 2011

Итак, я создал скомпилируемый прототип для элемента графа, который может преобразовывать свои данные в подписанные функции.

//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 ]

5 голосов
/ 21 января 2011
  • Реализация программы правильно и безопасно
  • Если производительность неприемлема
    • Хотя недопустимо
      • Профиль
      • Оптимизировать
  • Готово!

По моему опыту, преждевременная оптимизация - это дьявол.

РЕДАКТИРОВАТЬ:

Видимо, покаЯ форматировал свой ответ, другой Джеймс ниндзя ответил мне схожим ответом.Хорошо сыграно.

4 голосов
/ 21 января 2011

Можно ли оптимизировать мою систему приведения данных?И если да, как это сделать?

Если ваша программа не слишком медленная, то нет необходимости выполнять оптимизацию.Если он слишком медленный, то, как правило, повышение его производительности должно осуществляться следующим образом:

  1. Профилирование вашей программы
  2. Определение частей вашей программы, которые являются самыми дорогими
  3. Выберите из частей, найденных на шаге 2, те, которые (относительно) легко улучшить (101)
  4. Улучшите эти части кода с помощью рефакторинга, переписывания или других выбранных вами техник

Повторяйте эти шаги, пока ваша программа больше не будет работать слишком медленно.

...