SORUN: İşlem geçici COM otomasyon istemci uygulamasını Win95/98 askıda

Makale çevirileri Makale çevirileri
Makale numarası: 216400 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

Bir istemci uygulamasından bir işlem dışı COM sunucusu otomatikleştirme, istemci kodu sıkı bir döngüye girer ya da yeni arabirimler alma kapsamlı istekleri yapan, istemci uygulaması işlemi anormal olarak sona erdirmek kullanıcının gerek bir Otomasyon çağrısı sırasında askıda kalma. Bir kez askıya alındı, sıralanmış bir arabirim ilgili herhangi bir COM istek başarısız olur. Sorun temizlemek için yeniden başlatma gerekir.

Bu sorun, yalnızca Windows 95 ve Windows 98 sistemlerinde ortaya çıkar.

Neden

Bir arabirim işlem sınırları boyunca sıralanmış, çok sayıda sistem nesneleri işlemleri istemciyle sunucu arasındaki iletişimi işlemek için oluşturulur. OID ve sıralanmış bir arabirim belirlemek için COM tarafından gerekli OXID birlikte/stub, proxy de buna dahildir. Arabirim istemci bir işlem tarafından serbest bırakıldığında, bu nesneleri çöp toplama sırasında yok edilir.

Tasarım gereği, COM, yavaş atık toplama işlemi artık gerekli olmayan sistem kaynakları boşaltmak için kullanır. Bu koleksiyon, göreli bir etkinlik dışı kalma süreleri sırasında oluşur. Bir istemci uygulaması oluşmaya atık toplama işlemi için yeterli boş zaman sağlamıyorsa, sistem kaynakları yetersiz çalıştırın ve artık arabirimleri sıralamakta çalıştırabilmesi emin olabilir. Bu durumda, COM katmanına bozuk, sistem yeniden başlatılıncaya kadar başka atık toplama işlemi engelliyor olabilir.

Sorunun en yaygın nedeni istemci kodu, sıkı bir döngüye girmiştir veya art arda gelen çağrıları ve çok sayıda işlem dışı nesneler kısa bir süre içinde serbest burada kurulan bir iç içe geçmiş nesne sıradüzeni ilgili Otomasyon yoğun bir süre gerçekleştirme ' dir. Örneğin, aşağıdaki kod örneği, her Yazdır yöntemi ça?r?l?r konmasını üç arabirimler gerektiren bir iç içe geçmiş nesne hiyerarşisini gösterir. Kod, sıkı bir döngüde çalışır, çünkü sıralanmış arabirim sayısı 30'dur:
   For i = 1 To 10
      oExcel.ActiveWorkbook.Sheets(i).UsedRange.PrintOut
   Next i
				
Windows 95 ve Windows 98 için aynı anda sıralanabilir arabirimleri sayısı yaklaşık 65, 536'dır.

Çözüm

Geliştiriciler, sıkı döngüleri sırasında istek nesnesine yapılan başvuru sayısını ya da Otomasyon yoğun dönemin en aza indirmek gerekir. Bir arabirimde birden çok kez gerekiyorsa, okuyor için tutulan ve sürekli olarak yayımlanmış ve birkaç kez art arda reacquired yerine kullanılır.

Bu değiştirilmiş sürümü Yukarıdaki örnek, aynı görevi gerçekleştirir ancak yalnızca iki arabirim konmasını gerektirir (yukarıdaki kodundan yüzde 30 azaltma) her Yazdır çağrı:
   Set oBook = oExcel.ActiveWorkbook
   For i = 1 To 10
      oBook.Sheets(i).UsedRange.PrintOut
   Next i
				
işlemdeki komut dosyası için sunucunun sağlar, diğer olası çözüm bazı Otomasyon kod içinde-işlem bir sunucuya taşımak için olabilir. Örneğin, Microsoft Office ürünleri VBA iç Otomasyon için komut dosyası ekleyebilirsiniz. Bir VBA modülü içinde döngü kodunu taşıyarak, birden çok arabirim dizme kaçının ve bunun yerine, tüm iş sunucusu makro çağırmak.

Referanslar

Ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
219905Nasıl YAPıLıR: Dinamik ekleme ve bir VBA makrosu Visual Basic'den Çalıştır

Özellikler

Makale numarası: 216400 - Last Review: 24 Ocak 2007 Çarşamba - Gözden geçirme: 4.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows 95
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows Millennium Edition
Anahtar Kelimeler: 
kbmt kbautomation kboleapp kbprb KB216400 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:216400

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com