CitrixサーバーでEclipseRCPアプリの低速起動をデバッグしているときに、java.io.createTempFile(String、String、File)に5秒かかることがわかりました。これは、最初の実行時にのみ、特定のユーザーアカウントに対してのみ実行されます。具体的には、Citrixの匿名ユーザーアカウントに気づいています。他の多くの種類のアカウントを試したことはありませんが、この動作は管理者アカウントでは表示されません。
また、ユーザーが特定のディレクトリに書き込むためのアクセス権を持っているかどうかは関係ありません。ユーザーがアクセス権を持っていない場合、通話が失敗するまで5秒かかります。アクセス権がある場合、通話が成功するまでに5秒かかります。
これはWindows2003Server上にあります。Sunの1.6.0_16および1.6.0_19JREを試しましたが、同じ動作が見られます。
これが何らかの既知の問題であると少し期待してグーグルで検索しましたが、何も見つかりませんでした。他の誰かが以前にこれに遭遇しなければならなかったようです。
EclipseプラットフォームはFile.createTempFile()を使用してさまざまなディレクトリをテストし、初期化中に書き込み可能かどうかを確認します。この問題により、アプリケーションの起動時間が5秒長くなります。
私は誰かが以前にこれに遭遇したことがあり、いくつかの洞察を持っているかもしれないと想像します。これが私が実行したサンプルコードで、実際に時間を消費しているのはこの呼び出しであることを確認しています。また、createTempFileへの2回目の呼び出しで試してみたところ、後続の呼び出しがほぼ瞬時に返されることに気付きました。
public static void main(final String [] args)はIOException{をスローします 最終ファイルディレクトリ=newFile(args [0]); 最終的な長いstartTime=System.currentTimeMillis(); ファイルfile=null; 試す { file = File.createTempFile( "prefix"、 "suffix"、directory); System.out.println(file.getAbsolutePath()); } ついに { System.out.println(System.currentTimeMillis()-startTime); if(file!= null){ file.delete(); } } }
このプログラムの出力例は次のとおりです。
C:\> java.exe -jar filetest.jar C:/ Temp C:\ Temp \ prefix8098550723198856667suffix 5093