現在、Qt でデジタル信号をプロットしてQCustomPlotいますが、サンプル数が 10000000 を超えると、操作が非常に遅くなるようです。timeベクトルとベクトルがdataあり、データを次のように設定しています。
QCustomPlot *plot;
QCPGraph *graph;
graph->setData(time, data);
これをより効率的にするチャンスはありますか?
現在、Qt でデジタル信号をプロットしてQCustomPlotいますが、サンプル数が 10000000 を超えると、操作が非常に遅くなるようです。timeベクトルとベクトルがdataあり、データを次のように設定しています。
QCustomPlot *plot;
QCPGraph *graph;
graph->setData(time, data);
これをより効率的にするチャンスはありますか?
QCustomPlot は内部的に a QCPDataMap(の a typedef)を使用するため、座標 (キー)QMap<double, QCPData>で並べ替えられた実際のデータを格納するためにマップを使用していることを意味します。x残念ながら、このQCPGraph::setData(const QVector<double> &x, const QVector<double> &y)メソッドはサンプルを並べ替えることができ、挿入ヒントを使用しないという事実を利用していないため、結果が大幅に改善されました。
QCPDataMap *data = new QCPDataMap();
size_t len = x.size();
auto xp = std::begin(x);
auto yp = std::begin(y);
while (len--)
data->insertMulti(data->constEnd(), *xp, QCPData(*xp++, *yp++));
graph->setData(data);
マップ内のすべてのエントリに対して新しい割り当てと解放が行われ、何百万ものサンプルについて話しているため、std::maps またはs が X、Y グラフにサンプルを格納するのに最適な構造だとは思いません。QMapQCustomPlot は、これらのメモリの問題を回避するために、カスタム アロケータを使用してカスタム マップ クラスを実装する必要があります。