I/O fail tak segerak menyekat urutan UI dalam .NET: Analisis Sebab
KaedahFile.ReadAllLinesAsync()
direka untuk menyediakan akses fail tak segerak, membolehkan aplikasi UI melaksanakan operasi fail di latar belakang sambil mengekalkan operasi lancar. Walau bagaimanapun, seperti yang ditunjukkan oleh contoh kod, kaedah ini secara tidak dijangka menyekat urutan UI.
Sebab bagi tingkah laku ini adalah pelaksanaan yang tidak konsisten terhadap cadangan Microsoft untuk reka bentuk kaedah tak segerak. File.ReadAllLinesAsync()
Melanggar prinsip memulangkan Tugasan yang tidak lengkap selepas kerja penyegerakan yang minimum, dan sebaliknya menyekat urutan untuk masa yang lama sebelum kembali.
Hasil eksperimen dan pengoptimuman
Ujian prestasi menunjukkan bahawa File.ReadAllLinesAsync()
mungkin menyekat urutan semasa selama beratus-ratus milisaat, yang menjejaskan responsif UI secara serius. Tingkah laku ini konsisten merentas konfigurasi perkakasan.
Sebagai penyelesaian, adalah disyorkan untuk mengelak daripada menggunakan API sistem fail tak segerak dalam aplikasi GUI. Sebaliknya, API segerak harus dibalut dengan Task.Run
untuk mengekalkan pelaksanaan tak segerak tanpa menyekat benang.
Peningkatan dalam .NET 6
Walaupun API sistem fail tak segerak telah dipertingkatkan dalam .NET 6, ia masih tidak tak segerak sepenuhnya dan ketinggalan di belakang API segerak. Oleh itu, membalut API segerak dalam Task.Run
kekal sebagai pendekatan yang disyorkan untuk prestasi UI yang optimum.
Atas ialah kandungan terperinci Mengapa File.ReadAllLinesAsync() Menyekat Benang UI dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!