Apakah saya perlu melepaskan setiap objek? Apakah manajemen memori ditangani untuk saya?
sumber
Apakah saya perlu melepaskan setiap objek? Apakah manajemen memori ditangani untuk saya?
Terutama, selalu lepaskan kursor secara eksplisit ketika Anda selesai menggunakannya. Saya juga merilis beberapa objek enumerasi yang menyiratkan akses database, misalnya IEnumRelationship yang Anda dapatkan dari IRelationshipClass.GetRelationshipsForObject .
Juga, ketika Anda membuat banyak instance COM yang berumur pendek (terutama di loop ketat), itu juga ide yang baik untuk melepaskannya secara eksplisit.
Ada juga skenario kapan disarankan untuk merilis referensi fitur (baris) individual. Misalnya, jika Anda membuat versi geodatabase baru, mengedit data, merekonsiliasi & memposting, upaya untuk menghapus versi setelahnya mungkin gagal karena mungkin ada baris yang tidak dirilis, yang pada gilirannya tetap mengacu pada versi (ruang kerja) yang Anda coba hapus. Namun, sebagian besar skenario seperti itu jarang terjadi dan Anda tidak perlu memperhitungkannya dalam pengembangan ArcObjects Anda sehari-hari. Itu hanya akan membuat kode berantakan dengan pembersihan luar, membuatnya kurang terawat.
Penting juga untuk mengatakan kapan tidak merilis .NET wrappers - jangan pernah secara eksplisit melepaskan RCW dari ArcObjects yang mungkin digunakan oleh kode terkelola lainnya. Salah satu contohnya - jangan merilis IMap ketika di ArcMap. Secara umum, jangan mencoba untuk melepaskan ArcObjects yang tidak Anda buat.
Untuk sebagian besar pengumpulan sampah .NET bekerja dengan baik. Ada beberapa kasus di ArcObjects yang melakukan pekerjaan penting pada desctructors dan sifat non-deterministik dari pembungkus .NET dapat menyebabkan masalah. Topik bantuan ini mencakup kasus utama yang harus diperhatikan dan cara mengelola rilis.
Selalu hancurkan:
Berhati-hatilah untuk tidak menghancurkan sesuatu yang sedang digunakan di tempat lain.
Hari ini saya membaca diskusi menarik di situs web ESRI di mana Kirk berpartisipasi. Ada pendapat lain yang sangat menarik, seperti penggunaan metode ReleaseComObject dan FinalReleaseComObject (atau yang sejenisnya). Maaf saya tidak memiliki tautan pada saya sekarang.
Beberapa bahkan menyarankan untuk melepaskan IRows, tetapi banyak yang setuju bahwa lebih mudah untuk membiarkan GC menanganinya secara langsung.
Saya tidak pernah merilis IGeometry. Adakah yang mencobanya?
sumber
Saya akan menggunakan ESRI.ArcGIS.ADF.ComReleaser. Yang sedang berkata saya tidak benar-benar yakin objek busur mana yang menggunakan pola rilis deterministik tapi saya kebanyakan melampirkannya ke objek IServerContext karena itu yang paling penting.
inilah beberapa informasi yang dapat saya peroleh pada KTT Pengembang 2011 esri.
Daftar besar yang saya ingat adalah untuk objek tunggal (yang merupakan dua topik dalam bantuan).
Ini adalah tautan dari praktik terbaik untuk menggunakan ArcObjects di .NET "Melepaskan referensi COM" topik: http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Releasing_COM_references/0001000004tm000000/
Dan di sini ada posting di Blog Geodatabase untuk diskusi empatm yang berisi daftar objek: http://blogs.esri.com/dev/blogs/geodatabase/archive/2010/05/18/what_2700_s-up -with Comcomeleaser_3f00_.aspx
(terakhir posting blog dengan tautan untuk membantu seandainya url tidak berfungsi) http://blogs.esri.com/dev/blogs/geodatabase/archive/2008/12/18/using -the-comreleaser -to -manage ‑Kursus seumur hidup in in net .net.aspx
sumber
Jangan lupa objek IWorkspace. Pada KTT ESRI dev beberapa tahun yang lalu, saya mengajukan pertanyaan, dan jawaban dari ESRI adalah objek ICursor dan IWorkspace.
sumber
perbedaan aturan saat bekerja dengan Objek Server seperti Kursor dalam SOI? Saya mencoba menggunakan ComReleaser tetapi gagal setiap kali mendekati metode dalam kode SOI saya
sumber