簡體   English   中英

創建臨時文件非常慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM