> Your getCanonicalPath fix will not catch the situation for any OS
> other than Windows (the way it is coded right now).  It will also slow
> down scanning considerably, probably to the point that your prior
> optimization gets undone.  And it would probably break in the presence
> of symbolic links if we applied it to OSes that support them.
>

I would like to give figures of time needed to do a scan for 2 filesets
which have different characteristics relative to the optimization of
DirectoryScanner (use of include patterns to restrict the scanning when the
include patterns do not start with wildcards)

One example (extreme) of performance change between

Ant nightly July 10th    : 144 milliseconds

CVS Head                  : 39 milliseconds

to scan the following fileset :

<fileset id="myfileset" dir="c:/">
 <include
name="Programme/cygwin/usr/local/lib/xemacs-21.4.13/i686-pc-cygwin/include/m
"/>
</fileset>

One :( example for a more classical fileset :

<fileset id="myfileset2" dir="c:/dev/asf/ant/src/main">
<include name="**/*.java"/>
</fileset>

Ant nightly July 10th    : 380 milliseconds

CVS Head                  : 389 milliseconds

----------------------------------------------------------------------------
-----------------------
Figures of File.getCanonicalFile

110 milliseconds to do this 100 times:
File f = new
File("C:/Programme/cygwin/usr/local/lib/xemacs-21.4.13/i686-pc-cygwin/includ
e/m");
            try {
            File g = f.getCanonicalFile();
            }
            catch (Exception e) {}

----------------------------------------------------------------------------
------------------------------
build file snippet to measure scanning performance :
<project name="testzip" basedir=".">
<fileset id="myfileset" dir="c:/">
<include
name="Programme/cygwin/usr/local/lib/xemacs-21.4.13/i686-pc-cygwin/include/m
"/>
</fileset>
<fileset id="myfileset2" dir="c:/dev/asf/ant/src/main">
<include name="**/*.java"/>
</fileset>
<target name="test2">
  <script language="javascript"> <![CDATA[
     importClass(java.util.GregorianCalendar);
     importClass(java.lang.Long);
     importClass(java.lang.System);
    importPackage(Packages.org.apache.tools.ant.types);
    importPackage(Packages.org.apache.tools.ant);
     var letime;
     letime=new GregorianCalendar();
     var beforet;
     beforet= letime.getTimeInMillis();
     project.setNewProperty("beforet", Long.toString(beforet));
     for (i=0;i<10;i++) {

             a=new FileSet();
             r = new Reference();

             r.setRefId("myfileset2");
              a.setRefid(r);
             rs =   a.getDirectoryScanner(project);

     }
     aftert = new GregorianCalendar().getTimeInMillis();
     project.setNewProperty("aftert", Long.toString(aftert));
     elapsed =  aftert - beforet;
     project.setProperty("elapsed", Long.toString(elapsed));
        ]]> </script>
<echo>
before  : ${beforet}
after   : ${aftert}
elapsed : ${elapsed}
</echo>

</target>
</project>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to