Hallo,
ich habe ein kleines Performanceproblem mit der File Klasse. Aber kurz einmal die vorgeschichte damit man weiss um was es geht:
1.) Ich habe einen Ordner in dem pro Tag von einer Fremdapplikation ~10.000 Dateien (in diversen Unterverzeichnissen) abgestellt werden
2.) Dieser Ordner befindet sich auf einem Netzlaufwerk.
3.) Diese Dateien soll ich in ein Zip Archiv packen und das original löschen.
Ich erstelle mir nun eine Liste aller Dateien die ich zu archivieren habe. Um Informationen über die Datei zu bekommen benutze ich die File Klasse (Name, Letztes Modifikationsdatum, etc.). Und hier liegt der Hund begraben: Für die Abfrage des letzten Modifikationsdatums (lastModified) und ob es sich um ein File handelt (isFile) benötige ich pro Datei 30ms - kommt mir schon etwas lang vor.
Ein noch gravierenderes Performanceproblem habe ich anschliessend beim archivieren: Das Lesen einer einzelnen Datei dauert ca. 2-3 sekunden, obwohl das File gerade mal ~2k gross ist. Folgenden Code benutze ich dabei:
Das Problem tritt nur über Netzlaufwerke auf, lokal ist das ganze rasend schnell.
Irgendjemand ne idee?
Danke,
Egon
ich habe ein kleines Performanceproblem mit der File Klasse. Aber kurz einmal die vorgeschichte damit man weiss um was es geht:
1.) Ich habe einen Ordner in dem pro Tag von einer Fremdapplikation ~10.000 Dateien (in diversen Unterverzeichnissen) abgestellt werden
2.) Dieser Ordner befindet sich auf einem Netzlaufwerk.
3.) Diese Dateien soll ich in ein Zip Archiv packen und das original löschen.
Ich erstelle mir nun eine Liste aller Dateien die ich zu archivieren habe. Um Informationen über die Datei zu bekommen benutze ich die File Klasse (Name, Letztes Modifikationsdatum, etc.). Und hier liegt der Hund begraben: Für die Abfrage des letzten Modifikationsdatums (lastModified) und ob es sich um ein File handelt (isFile) benötige ich pro Datei 30ms - kommt mir schon etwas lang vor.
Ein noch gravierenderes Performanceproblem habe ich anschliessend beim archivieren: Das Lesen einer einzelnen Datei dauert ca. 2-3 sekunden, obwohl das File gerade mal ~2k gross ist. Folgenden Code benutze ich dabei:
Code:
public boolean addFile( String filePath, String fileName, String pathInZip )
throws FileNotFoundException, IOException
{
debug_.printMessage( "ZipArchiver.addFile(): Adding to ZIP [" + filePath + "]" );
FileInputStream inStream = new FileInputStream( filePath );
zipStream_.putNextEntry( new ZipEntry( MessageFormat.format( "{0}{1}", pathInZip, fileName )));
int len = 0;
byte[] buffer = new byte[readBlockSize_];
while(( len = inStream.read( buffer )) > 0 )
{
zipStream_.write( buffer, 0, len );
}
zipStream_.closeEntry();
return true;
}
Das Problem tritt nur über Netzlaufwerke auf, lokal ist das ganze rasend schnell.
Irgendjemand ne idee?
Danke,
Egon