Directory file size calculation - how to make it faster?

前端 未结 8 1397
没有蜡笔的小新
没有蜡笔的小新 2020-12-08 11:10

Using C#, I am finding the total size of a directory. The logic is this way : Get the files inside the folder. Sum up the total size. Find if there are sub directories. Then

8条回答
  •  無奈伤痛
    2020-12-08 11:26

    Peformance will suffer using any method when scanning a folder with tens of thousands of files.

    • Using the Windows API FindFirstFile... and FindNextFile... functions provides the fastest access.

    • Due to marshalling overhead, even if you use the Windows API functions, performance will not increase. The framework already wraps these API functions, so there is no sense doing it yourself.

    • How you handle the results for any file access method determines the performance of your application. For instance, even if you use the Windows API functions, updating a list-box is where performance will suffer.

    • You cannot compare the execution speed to Windows Explorer. From my experimentation, I believe Windows Explorer reads directly from the file-allocation-table in many cases.

    • I do know that the fastest access to the file system is the DIR command. You cannot compare performance to this command. It definitely reads directly from the file-allocation-table (propbably using BIOS).

    • Yes, the operating-system caches file access.

    Suggestions

    • I wonder if BackupRead would help in your case?

    • What if you shell out to DIR and capture then parse its output? (You are not really parsing because each DIR line is fixed-width, so it is just a matter of calling substring.)

    • What if you shell out to DIR /B > NULL on a background thread then run your program? While DIR is running, you will benefit from the cached file access.

提交回复
热议问题