GPX files으로 작업하기위한 응용 프로그램을 작성 중이며 QDomElement 클래스를 사용하여 큰 XML 문서를 읽을 때 성능 문제가 있습니다. 수천 개의 웨이 포인트가 포함 된 GPS 경로가있는 파일은로드하는 데 30 분 정도 걸릴 수 있습니다. Qt QDomElement 성능 문제
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);
}
}
}
애플의 악기와 코드 분석 내가 QDomNodeListPrivate :: createList()가 컴퓨팅 대부분의 시간과에 대한 책임이 있음을 발견 할 때 :
이는 경로 (경로 나 트랙)를 읽어 내 코드입니다 QDomNodeList :: count()와 QDomNodeList :: item() 모두에 의해 호출됩니다.
QDomElement의 자식 요소를 반복하는 효율적인 방법은 아니지만 모든 작업에 대해 목록이 다시 생성되는 것처럼 보입니다. 대신 어떤 접근 방식을 사용해야합니까?
이것이 내 앱에서도 위대한 개선 사항임을 확인할 수 있습니다. 나는 10 초에서 2 초의 파싱 시간을 보냈다. 당신이 말했듯이 문제는 QDomNodeListPrivate :: createList()를 호출하는 QDomNodeList :: count() 메서드입니다 ... 매우 느립니다. – mrAlmond