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);

Reply via email to