I have attached
a performance fix for castor using jdk1.3.1.
The
org.exolab.castor.persist.TransactionContext was using a Vector to store objects. The instance variable _objects is now of type org.apache.turbine.util.SequencedHashtable. The objects can be retreived in order and removed using hashtable lookups. It is was a significant performance improvement for me. Steve org/exolab/castor/persist/TransactionContext.java 76a78,79
> import org.apache.turbine.util.SequencedHashtable; > 173c176 < private final Vector _objects = new Vector(); --- > private final SequencedHashtable _objects = new SequencedHashtable(); 1665c1668 < _objects.removeAllElements(); --- > _objects.clear(); 1736c1739 < _objects.removeAllElements(); --- > _objects.clear(); 2038c2041 < _objects.addElement( entry ); --- > _objects.put( object,entry ); 2091,2098c2094 < ObjectEntry entry; < < for ( Enumeration enum = _objects.elements(); enum.hasMoreElements(); ) { < entry = (ObjectEntry) enum.nextElement(); < if ( entry.object == object ) < return entry; < } < return null; --- > return (ObjectEntry)_objects.get(object); 2150,2162c2146 < int size; < ObjectEntry entry; < < size = _objects.size(); < for ( int i = 0; i < size; i++ ) { < entry = (ObjectEntry) _objects.elementAt( i ); < if ( entry.object == object ) { < _objects.removeElementAt( i ); < ( (Hashtable) _engineOids.get( entry.engine ) ).remove( entry.oid ); < return entry; < } < } < return null; --- > return (ObjectEntry)_objects.remove(object); |