Saya punya direktori dengan sekitar 100.000 file di dalamnya. Jika hang lebih dari satu menit. Saya berlari strace, dan segera mulai melihat getdents, jadi ls jelas membaca direktori. Saya juga melihat banyak panggilan ke brk, jadi ls jelas buffering hal-hal di memori. Saya menulis sebuah program sederhana yang memanggil readdir dan menampilkan nama file, dan segera merespons. Tapi ls -f tidak memberikan output. Apa yang menyebabkannya? Saya pikir inti dari -f adalah menyebabkan ls tidak melakukan apa-apa selain readdir. Apakah ada cara yang portabel dan andal untuk membuat daftar isi direktori? (Catatan, ini adalah ls dari coreutils gnu di Linux.)
-EDIT-
Ada alias di tempat, tetapi "/ bin / ls -1f> / dev / null" membutuhkan waktu 8 hingga 15 detik, "/ bin / ls -1fx> / dev / null" membutuhkan 4 hingga 11 detik, tetapi sebuah program sederhana readdir hanya membutuhkan 0,011 detik. Apa yang harus saya lakukan untuk membuat gnu tidak mengisap?
Pengoptimalan ditambahkan di coreutils 7.0 (komit 8d974b00fbbc2025de63e1e6d54827648fefa1c4):
Penjelasan pertama yang terlintas dalam pikiran adalah bahwa Anda menjalankan versi coreutils yang lebih lama. Anda perlu meningkatkan.
sumber