[英]Creating a temp file is incredibly slow
致電的任何理由
File.createTempFile("prefix", ".suffix", new File("C:\\");
可能需要40-50秒才能完成?
更新:我敲了一些測試工具,以測試在C:\\和默認tmp文件夾上創建100個測試文件為基准。 與僅將其保留為默認值相比,指定“ C:\\”始終要慢0.9ms,從而允許JVM預熱時間,GC暫停等。(不知道為什么會這樣,但這不是問題。)
一次運行都不會遇到類似延遲的情況,這表明該應用程序首先執行了其他操作,從而導致了問題。
使用Suns JVM 1.6.0_12客戶端。
前段時間,在開發基於Swing的應用程序時,我遇到了JVM中的一個錯誤,如果您的桌面上有一個大的zip文件,它將導致文件請求器的打開速度非常慢。 當文件夾中存在大量文件時,還存在另一個相關問題。
可能與您的問題有關。 您使用哪個版本的JDK?
請查看此線程以獲取一些信息:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4638397
http://groups.google.com/group/comp.lang.java.help/browse_thread/thread/ec8854f82f381123
對磁盤進行碎片整理也是一個好主意。
試試吧:
try {
// Create temp file.
File temp = File.createTempFile("pattern", ".suffix");
// Delete temp file when program exits.
temp.deleteOnExit();
// Write to temp file
BufferedWriter out = new BufferedWriter(new FileWriter(temp));
out.write("aString");
out.close();
} catch (IOException e) {
}
我已經看到Windows上的文件刪除需要花費一分鍾的時間,但是文件創建卻沒有。 我會檢查一下,以確保您最近進行了碎片整理,並且您家中的文件數量也足夠合理 。 一旦獲得了超過1,000個文件(包括隱藏文件),Windows就會非常困難。
如果不指定c:\\
並允許Java將文件放置在默認位置,會發生什么?
病毒檢查程序有時會使文件系統訪問變慢,尤其是在Windows系統上。 它們會攔截對文件系統的所有訪問,並且可以在允許應用程序從磁盤寫入或讀取之前進行大量處理。
我會檢查並禁用任何病毒檢查軟件,看看是否有幫助。
如果其他建議沒有幫助(禁用病毒掃描程序並檢查間諜軟件),則建議您獲取JDK源代碼並運行IDE的調試器,以查看在createTempFile()
期間它“掛在哪里”。
FWIW,我最終不得不運行磁盤清理 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.