Ich versuche in meinem Projekt das zerlegen eines strings, der 2 Trennzeichen beeinhaltet, zu beschleunigen. Nur anscheinend ist mir das Gegenteil gelungen, und die benötigte Zeit wurde verdoppelt
![:(](wcf/images/smilies/sad.png.pagespeed.ce.R_Dlrl8CWi.png)
(gemessen mit QTime, im Release Mode, nicht über VS gestartet).
Ein, zu zerlegender string, sieht in etwa so aus:
"12:0,15:2,25:4,"
Der Momentane Code sieht so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
void MapReader::_parseTileString(const Point<uint32> &pos, const QString &tileString, Layer layer)
{
QStringList tileObjectStrings = tileString.split(QRegExp("\\D?,\\D?")); // beliebig viele nicht digits, gefolgt von einem Komma, gefolgt von beliebig vielen nicht digits
QStringList::const_iterator itr = tileObjectStrings.begin();
for (uint32 x = 0; x < m_pMap->getSize().x && itr != tileObjectStrings.end(); ++x, ++itr)
{
int delimiterIndex = itr->indexOf(":");
MapTile tileObject(itr->left(delimiterIndex).toUInt(), itr->right(itr->length() -1 -delimiterIndex).toUInt());
m_pMap->setMapTile(Point3D<uint32>(x, pos.x, pos.y), tileObject, layer);
}
}
|
Meine Trennzeichen sind : und , (nur der Vollständigkeit halber). Hat jemand eine Idee, wie ich das besser optimieren könnte? Eine ähnliche Geschwindigkeit wäre dann schon wünschenswert
![;)](wcf/images/smilies/wink.png.pagespeed.ce.L9LRa_F2a5.png)
Der vorherige Code ist einfach nur scheußlich, und den würde ich ganz gerne weg haben, deswegen suche ich so versessen nach einer besseren Lösung.
PS: Um eventuellen Fragen vorzubeugen. Es geht mir tatsächlich nur um das Zerlegen. Der Rest (das Eintragen in die Map, usw) ist mit der vorherigen Lösung identisch.
EDIT: Nutze QT 4.8.1