Explorar el Código

Improved XMLNode::~XMLNode perfomance (#1075)

Improved XMLNode::~XMLNode perfomance (#1075)
Lee Thomason hace 19 horas
padre
commit
8d8472fe1a
Se han modificado 2 ficheros con 11 adiciones y 9 borrados
  1. 11 1
      tinyxml2.cpp
  2. 0 8
      tinyxml2.h

+ 11 - 1
tinyxml2.cpp

@@ -834,7 +834,17 @@ XMLNode::XMLNode( XMLDocument* doc ) :
 
 XMLNode::~XMLNode()
 {
-    DeleteChildren();
+    // Fast path: this node is dying, so maintaining _firstChild/_lastChild and
+    // sibling _prev/_next links is unnecessary. Only _parent must be zeroed to
+    // satisfy the MarkInUse assertion inside DeleteNode.
+    XMLNode *currentChild = _firstChild;
+    while (currentChild != NULL) {
+        XMLNode *next = currentChild->_next;
+        currentChild->_parent = 0;
+        DeleteNode(currentChild);
+        currentChild = next;
+    }
+
     if ( _parent ) {
         _parent->Unlink( this );
     }

+ 0 - 8
tinyxml2.h

@@ -42,14 +42,6 @@ distribution.
 #endif
 #include <stdint.h>
 
-/*
-	gcc:
-        g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
-
-    Formatting, Artistic Style:
-        AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
-*/
-
 #if defined( _DEBUG ) || defined (__DEBUG__)
 #   ifndef TINYXML2_DEBUG
 #       define TINYXML2_DEBUG