Yanıtlar:
En önemlisi, onlarla işiniz bittiğinde daima imleçleri açıkça bırakın . Ayrıca veritabanı erişimi ima bazı numaralandırma nesneleri, örneğin IRelationshipClass.GetRelationshipsForObject almak IEnumRelationship serbest .
Ayrıca, kısa ömürlü (özellikle sıkı döngülerde) çok sayıda COM örneği oluşturduğunuzda, bunları açıkça serbest bırakmak da iyi bir fikirdir.
Ayrı ayrı özellik (satır) referanslarının ne zaman serbest bırakılmasının önerilebileceği senaryoları da vardır. Örneğin, yeni bir coğrafi veritabanı sürümü oluşturursanız, verileri düzenleyin, mutabık kılın ve yayınlayın, daha sonra silmeye çalıştığınız sürüme (çalışma alanı) başvuruda bulunan yayınlanmamış satırlar olabileceğinden sürümü silme girişimleri başarısız olabilir. Bununla birlikte, çoğunlukla, bu tür senaryolar nadirdir ve bunları günlük ArcObjects geliştirmenizde hesaba katmanıza gerek yoktur. Kodu yalnızca yabancı temizleme ile karmaşık hale getirir ve daha az bakım yapılabilir hale getirir.
.NET sarmalayıcılarını ne zaman serbest bırakmayacağınızı söylemek de önemlidir - başka herhangi bir yönetilen kod tarafından kullanımda olabilecek RCO ArcObjects'i asla açıkça bırakmayın. Bunun bir örneği - ArcMap'deyken IMap'i serbest bırakmayın. Genel olarak, oluşturmadığınız ArcObjects'i serbest bırakmaya çalışmayın.
Çoğunlukla .NET çöp toplama iyi çalışır. ArcObjects'te, açıcılar üzerinde önemli çalışmalar yapan bazı durumlar vardır ve .NET sarmalayıcılarının deterministik olmayan doğası sorunlara neden olabilir. Bu yardım konusu , yayınlanacak endişeleri ve sürümlerin nasıl yönetileceğini kapsar.
Her zaman yok et:
Başka bir yerde kullanılan bir şeyi yok etmemeye dikkat edin.
Bugün Kirk'ün katıldığı ESRI web sitesinde ilginç bir tartışma okudum. ReleaseComObject yöntemi ve FinalReleaseComObject (veya benzeri bir şey) kullanımı gibi başka çok ilginç görüşler vardı. Üzgünüm, şu an üzerimdeki bağlantı yok.
Bazıları IRow'ları serbest bırakmayı önerdi, ancak birçoğu GC'nin doğrudan onları kullanmasına izin vermenin daha kolay olduğunu kabul etti.
Hiçbir IGeometriyi asla serbest bırakmam. Bunu deneyen var mı?
ESRI.ArcGIS.ADF.ComReleaser kullanacağım. Tam olarak hangi yay nesnelerinin deterministik bir serbest bırakma modeli kullandığından emin değilim ama en önemli olanı çoğunlukla IServerContext nesnesine ekliyorum.
using (ComReleaser comReleaser = new ComReleaser())
{
}
2011 esri Geliştirici zirvesinde elde edebildiğim bazı bilgiler.
Hatırladığım büyük liste singleton nesneleri içindi (yardımda iki konu var).
Bu, ArcObjects'in .NET'te "COM referanslarını serbest bırakma" konusundaki en iyi uygulamalarından bağlantıdır: http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Releasing_COM_references/0001000004tm000000/
Ve Geodatabase Blogunda, nesnelerin bir listesini içeren dört metrelik bir tartışma için bir yayın: http://blogs.esri.com/dev/blogs/geodatabase/archive/2010/05/18/what_2700_s‑up‑with -comreleaser_3f00_.aspx
(son olarak, URL'nin çalışmadığı durumlarda yardımcı olacak bir bağlantı içeren bir blog yazısı) http://blogs.esri.com/dev/blogs/geodatabase/archive/2008/12/18/using‑the‑comreleaser‑to‑manage -the-ömrü-of-the imleçler-in-.net.aspx
IWorkspace nesnelerini unutmayın. ESRI dev Zirvesi'nde birkaç yıl önce soruyu sordum ve ESRI'nin cevabı ICursor ve IWorkspace nesneleriydi.
SOI'da İmleç gibi Sunucu Nesneleriyle çalışırken kurallar farklı mıdır? ComReleaser kullanmaya çalışıyorum ama her zaman benim SOI kod yöntemine yakın bir yere alır başarısız olur