私は、データをサブスクライブされた関数にキャストできるグラフ要素のコンパイル可能なプロトタイプを作成しました。シンプルなデータ(イベント)キャストを最適化する方法クラス?
//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();
}
データキャスティングシステムを最適化できますか?そしてもしそうなら、それを行う方法?
「このシンプルなアプリはCPUの5%を食べている」と言っても意味がありません。走るのにどれくらい時間がかかりますか?これが特に高価なものは何か分かりましたか?あなたのパフォーマンスのホットスポットはどこにありますか? (それが価値あるものであれば、あなたのコードは手作業のリソース管理ではかなり安全ではありません) –
これを最適化したいが、実行にどれくらいの時間がかかるか、CPUをどれくらいロードするかは気にしない?これを最適化するには、プロファイラ**を使用して、どの部分に集中すべきかを調べます。 –
私の主張は、このクラスをC++コードライティングの専門家の見通しからより良くすること、それを行う方法です。 – Rella