2011-01-21 7 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%を食べている」と言っても意味がありません。走るのにどれくらい時間がかかりますか?これが特に高価なものは何か分かりましたか?あなたのパフォーマンスのホットスポットはどこにありますか? (それが価値あるものであれば、あなたのコードは手作業のリソース管理ではかなり安全ではありません) –

+2

これを最適化したいが、実行にどれくらいの時間がかかるか、CPUをどれくらいロードするかは気にしない?これを最適化するには、プロファイラ**を使用して、どの部分に集中すべきかを調べます。 –

+0

私の主張は、このクラスをC++コードライティングの専門家の見通しからより良くすること、それを行う方法です。 – Rella

答えて

5
  • パフォーマンスは許容できない
    • 許容されていないが
      • プロフィール完了
      • 最適化
  • 場合は正しく安全に
  • プログラムを実施!

私の経験では、早すぎる最適化は悪魔です。

EDIT:

どうやら私は私の答えをフォーマットしている間に、別のジェームズは同様の答えを私にninja'd。よくやった。

4

データキャスティングシステムを最適化できますか?そしてもしそうなら、それを行う方法?

プログラムの速度がそれほど遅くなければ、最適化を実行する必要はありません。それは遅すぎる場合には、一般的に、その性能を向上するので、同様に行われる必要があります:

  1. で見つかった部分から最も高価な
  2. 選択をしているあなたのプログラムの部分を識別してプログラムプロフィールステップ2である可能性が高いものは、(比較的)簡単
  3. は、リファクタリングを経由して、コードの部分を改善書き換え、またはあなたはヨーヨーまで

これらの手順を繰り返しを選択する他の技術向上させるためにウルプログラムはもはや遅すぎません。

関連する問題