@@ -259,8 +259,12 @@ void QgsInvertedPolygonRenderer::stopRender( QgsRenderContext& context )
259
259
return ;
260
260
}
261
261
262
+ QgsMultiPolygon finalMulti; // avoid expensive allocation for list for every feature
263
+ QgsPolygon newPoly;
264
+
262
265
Q_FOREACH ( const CombinedFeature& cit, mFeaturesCategories )
263
266
{
267
+ finalMulti.resize ( 0 ); // preserve capacity - don't use clear!
264
268
QgsFeature feat = cit.feature ; // just a copy, so that we do not accumulate geometries again
265
269
if ( mPreprocessingEnabled )
266
270
{
@@ -283,7 +287,7 @@ void QgsInvertedPolygonRenderer::stopRender( QgsRenderContext& context )
283
287
//
284
288
// No validity check is done, on purpose, it will be very slow and painting
285
289
// operations do not need geometries to be valid
286
- QgsMultiPolygon finalMulti;
290
+
287
291
finalMulti.append ( mExtentPolygon );
288
292
Q_FOREACH ( const QgsGeometry& geom, cit.geometries )
289
293
{
@@ -312,9 +316,9 @@ void QgsInvertedPolygonRenderer::stopRender( QgsRenderContext& context )
312
316
// add interior rings as new polygons
313
317
for ( int j = 1 ; j < multi[i].size (); j++ )
314
318
{
315
- QgsPolygon new_poly;
316
- new_poly .append ( multi[i][j] );
317
- finalMulti.append ( new_poly );
319
+ newPoly. resize ( 0 ); // preserve capacity - don't use clear!
320
+ newPoly .append ( multi[i][j] );
321
+ finalMulti.append ( newPoly );
318
322
}
319
323
}
320
324
}
0 commit comments