Rumah >pembangunan bahagian belakang >C++ >Mengapa File.ReadAllLinesAsync() Kadangkala Sekat Benang UI dalam .NET?
Walaupun File.ReadAllLinesAsync()
dalam .NET (versi 3.1 dan lebih baharu) menyasarkan kelakuan tidak menyekat, ia secara mengejutkan boleh menyekat urutan UI dalam keadaan tertentu.
Dalam aplikasi WPF, menggunakan File.ReadAllLinesAsync()
mungkin membekukan UI. Ini berpunca daripada ketidakkonsistenan dalam cara API akses fail tak segerak dilaksanakan. Garis panduan Microsoft mencadangkan kaedah tak segerak harus mengembalikan Task
selepas kerja segerak yang minimum. File.ReadAllLinesAsync()
menyimpang daripada ini, membawa kepada penyekatan yang berpanjangan sebelum mengembalikan Task
yang tidak lengkap.
Penyelesaian yang disyorkan ialah menggunakan kaedah File.ReadAllLines()
segerak dalam Task.Run()
. Ini memunggah bacaan fail ke urutan latar belakang, menghalang UI menjadi beku.
Ujian membaca fail 6MB dengan File.ReadAllLinesAsync()
mendedahkan sekatan UI yang ketara kira-kira 450 milisaat – penyimpangan yang jelas daripada kelakuan tak segerak yang dijangkakan.
Walaupun dengan penambahbaikan dalam I/O fail tak segerak .NET 6, File.ReadAllLinesAsync()
mengekalkan had prestasi. Ia jauh lebih perlahan (kira-kira dua kali ganda masa) daripada rakan sejawatan segeraknya dan bukan tak segerak sepenuhnya. Oleh itu, menggunakan versi segerak dalam Task.Run()
kekal sebagai amalan terbaik sehingga pengoptimuman API selanjutnya dilaksanakan.
Atas ialah kandungan terperinci Mengapa File.ReadAllLinesAsync() Kadangkala Sekat Benang UI dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!