Memori sedang dikonsumsi oleh rakitan run-time yang dihasilkan secara dinamis yang dibuat di dalam konstruktor XmlSerializer
. Dari dokumentasi sebuah>:
Majelis yang Dihasilkan Secara Dinamis
Untuk meningkatkan kinerja, infrastruktur serialisasi XML secara dinamis menghasilkan rakitan untuk membuat serialisasi dan deserialisasi tipe tertentu.
Artinya, pertama kali Anda membuat XmlSerializer
untuk tipe tertentu, refleksi digunakan untuk menghasilkan kode c# yang membuat serialisasi dan deserialisasi tipe dan semua tipe yang direferensikan, yang kemudian dihubungkan dan dimuat ke dalam Penyimpanan. Anda dapat melihat kode sumber referensi yang melakukan hal ini di TempAssembly
< /a> kelas. Memuat rakitan dinamis akan menghabiskan memori, dan memori tersebut tidak akan pernah dilepaskan hingga AppDomain
dibongkar.
Namun, setelah dibuat, rakitan dinamis di-cache dan digunakan kembali oleh runtime dalam situasi berikut:
Infrastruktur menemukan dan menggunakan kembali rakitan tersebut. Perilaku ini hanya terjadi ketika menggunakan konstruktor berikut:
XmlSerializer.XmlSerializer(Type)
XmlSerializer.XmlSerializer(Type, String)
.
Jika Anda menggunakan salah satu konstruktor lain, beberapa versi rakitan yang sama akan dihasilkan dan tidak pernah dibongkar, yang mengakibatkan kebocoran memori dan kinerja buruk. Solusi termudah adalah dengan menggunakan salah satu dari dua konstruktor yang disebutkan sebelumnya. Jika tidak, Anda harus menyimpan cache rakitan di Hashtable...
Karena Anda sedang menggunakan konstruktor pertama, rakitan dinamis Anda di-cache dan digunakan kembali, artinya konsumsi memori hanya terjadi satu kali saja selama eksekusi aplikasi Anda < em>untuk setiap jenis root yang Anda buat serial. Selama Anda hanya membuat serial dalam jumlah terbatas, memori yang digunakan oleh rakitan dinamis ini dibatasi dan distabilkan dengan cukup cepat.
(Jika Anda perlu membuat serialisasi jenis dalam jumlah yang mungkin tidak terbatas karena Anda melakukannya, katakanlah, pembuatan kelas dinamis maka penggunaan memori Anda mungkin akan terus meningkat. Namun saya ragu Anda melakukan itu.)
person
dbc
schedule
23.06.2015