GPX ファイルを操作するアプリケーションを作成していますが、QDomElement クラスを使用して大きな XML ドキュメントを読み取るときにパフォーマンスの問題が発生します。何千ものウェイポイントを含む GPS パスを含むファイルは、読み込みに 30 分かかる場合があります。
これは、パス (ルートまたはトラック) を読み取るための私のコードです。
void GPXPath::readXml(QDomElement &pathElement)
{
for (int i = 0; i < pathElement.childNodes().count(); ++i)
{
QDomElement child = pathElement.childNodes().item(i).toElement();
if (child.nodeName() == "trkpt" ||
child.nodeName() == "rtept")
{
GPXWaypoint wpt;
wpt.readXml(child);
waypoints_.append(wpt);
}
}
}
Apple の Instruments でコードを分析すると、QDomNodeListPrivate::createList() が計算時間の大部分を占めており、QDomNodeList::count() と QDomNodeList::item() の両方によって呼び出されていることに気付きました。
リストは操作ごとに再生成されるように見えるため、これは QDomElement の子要素を反復処理する効率的な方法ではないようです。代わりにどのアプローチを使用する必要がありますか?