DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ· RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=42219>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ· INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=42219 Summary: Inefficient code in Union, DirectoryScanner makes large copy tasks very slow Product: Ant Version: 1.7.0 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: Core tasks AssignedTo: dev@ant.apache.org ReportedBy: [EMAIL PROTECTED] In the (apparently) new org.apache.tools.ant.types.resources.Union class, and in the venerable org.apache.tools.ant.DirectoryScanner class, Vectors or ArrayList objects are used to accumulate unique file names. The resultant use of the "contains" or "indexOf" methods on those objects consumes a tremendous amount of CPU time when the lists get long. The primary offender is the code in the new Union class, specifically in the "getCollection" implementation. The code in DirectoryScanner is similar but (in my experience) causes less dramatic problems. I'll attach a test build.xml file. The solution is simple: since Java 1.4, java.util.LinkedHashSet has been available to combine the lookup ("contains") performance of a HashSet coupled with the predictable ordering of ArrayList or Vector. In the Union class, the code change necessary is to replace the ArrayList with a LinkedHashSet. In DirectoryScanner, all the Vector sets can be similarly replaced, though a few cleanup code changes are necessary (invisible outside the class). In my real-life build, I have an "install" phase that involves at one point copying over 12,000 .class files into an application directory. That was taking about 45 seconds of solid 100% CPU-burning time (without actually doing any copying; it was a "null build" situation where a build had just been completed), but after hacking in my own fix to Union.java the build runs in about 15 seconds (directly comparable to 1.6.5). By applying the fixes to DirectoryScanner as well, the "null build" time drops to 10 or 11 seconds. -- Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]