App not responding khi dùng Directory.GetFiles

Hi there,
Đây là code của mk:

  foreach (string path in Directory.GetFiles("D:\\test"))
    {
        listBox1.Items.Add(path);
    }

trong folder test có khoảng 10000 files, làm sao để khi debug, app ko bị not responding nhỉ
mong các bn giúp vs
thanks:smiling_face_with_three_hearts::grin:

Có vài cách, bạn có thể thử lần lượt từng phương pháp:

  1. Tạo Index cho folder test. Bạn có thể theo hướng dẫn ở đây: https://www.tomshardware.com/reviews/windows-10-index-files-improve-search,5593.html
  2. Dùng method EnumerateFiles thay cho GetFiles như ví dụ dưới đây:
DirectoryInfo dirInfo = new DirectoryInfo(myBaseDirectory);
FileInfo[] allFiles = 
    dirInfo.EnumerateFiles("*.*", SearchOption.AllDirectories)
           .AsParallel()
           .ToArray();

EnumerateFiles dùng lazy evaluation, kết hợp với parallel, chúng ta có thể làm cho chương trình chạy nhanh hơn.

  1. Và cuối cùng, bạn có thể thử dùng các method bất đồng bộ (async và await) để chương trình không cần phải chờ cho đến khi toàn bộ các file trong directory được duyệt xong.
4 Likes

cách thứ 3 làm thế nào vậy bn?

Bạn thử code là

foreach (string path in Directory.GetFiles(@"D:\test"))

hoặc

foreach (string path in Directory.GetFiles("D:\\test"))

xem còn bị không? Chứ 10000 files chẳng có lý do gì để bị crash trong vòng for cả. 2 tỉ file thì còn hợp lý.

3 Likes

mk thử rùi, nó ko bị not responding nữa, mà ko nhấn vào button khác được, kiểu ko thực hiện dc task khác ak

Dùng thread, backgroundworker.
Mà chẳng ai đi add 10000 item vào 1 listbox cả. Chia nó ra.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?