OutOfMemoryException Dilemparkan oleh Imej.FromFile untuk Format Imej Tidak Sah: Penjelasan
Apabila cuba memuatkan imej menggunakan Image.FromFile, pembangun mungkin menghadapi OutOfMemoryException walaupun untuk fail dengan format imej yang sah. Ini mungkin kelihatan berlawanan dengan intuisi, yang membawa kepada persoalan mengapa pengecualian ini sengaja dilemparkan untuk format imej yang tidak sah.
Jawapannya terletak pada sejarah perpustakaan GDI, yang dibangunkan sebelum kemunculan .NET. Pelaksanaan C GDI bergantung pada kod ralat dan bukannya pengecualian untuk melaporkan isu. Untuk mengekalkan keserasian, pembalut .NET untuk GDI mengekalkan tingkah laku ini.
Disebabkan pengehadan C , bilangan kod ralat yang mungkin dikekang. Akibatnya, GDI mentakrifkan hanya 20 kod ralat, jumlah yang tidak mencukupi untuk menampung semua masalah format imej yang berpotensi. Pengehadan ini membawa kepada beban berlebihan kod ralat OutOfMemory untuk mewakili kedua-dua isu memori tulen dan masalah dengan format fail imej.
Apabila menghadapi format imej yang tidak sah, GDI tidak dapat menentukan sama ada isu itu berpunca daripada kekurangan memori yang tersedia. atau kerosakan data dalam fail imej. Akibatnya, ia melaporkan ralat sebagai OutOfMemory.
Untuk menyediakan pengendalian ralat yang lebih tepat, anda boleh membalut panggilan Image.FromFile dalam blok try-catch dan membuang pengecualian yang lebih khusus konteks, seperti FormatException , seperti yang ditunjukkan dalam kod yang disediakan:
public static Image OpenImage(string filename) { try { return Image.FromFile(filename); } catch (OutOfMemoryException ex) { throw new FormatException("The file does not have a valid image format.", ex); } }
Dengan mengendalikan OutOfMemoryException dan menyediakan pengecualian yang lebih deskriptif, anda boleh meningkatkan pengalaman pengguna dan memudahkan untuk mengenal pasti dan menyelesaikan punca ralat.
Atas ialah kandungan terperinci Mengapakah `Image.FromFile` Membuang `OutOfMemoryException` untuk Format Imej Tidak Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!