1

バイナリ ファイルをディスクに格納する J2EE アプリケーションのプロファイリングを行っています。プロファイリング中に大量の IO ボトルネックが発見されましたが、これには対処する必要があります。ただし、次のコード行でも速度低下が見られます。

// Example URI path
String filename = "/path/to/file.txt"  

// This line at load takes almost 500 ms
return new File(filename).toURI();

問題のメソッドは、ファイル パスを受け取り、ファイルを書き込むことができるファイル パスを返します。

スローダウンはロード時にのみ発生するため、この行ではプロセスが IO バウンドであると推測しています。これは事実ですか?もしそうなら、パフォーマンスが向上する URI を割り当てるより良い方法はありますか?

4

1 に答える 1

2

そのメソッドのソース コードは次のとおりです。

   public URI toURI() {
    try {
        File f = getAbsoluteFile();
        String sp = slashify(f.getPath(), f.isDirectory());
        if (sp.startsWith("//"))
        sp = "//" + sp;
        return new URI("file", null, sp, null);
    } catch (URISyntaxException x) {
        throw new Error(x);     // Can't happen
    }
    }

「getAbsoluteFile()」は、ファイルシステムにアクセスして相対パスを絶対パスに解決する必要があるため、実際には IO バウンドです (チェーンの FileSystem.resolve() メソッドを介して)。

于 2012-06-06T17:17:05.693 に答える