Aracılığıyla paylaş


CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT

hresult CORPROF_E_UNSUPPORTED_CALL_SEQUENCE .NET Framework sürüm 2.0 tanıtıldı. .NET Framework 4 iki senaryoda bu HRESULT değerini döndürür:

  • Ele geçirici bir profil oluşturucu, iş parçacığının tutarsız durumdaki yapılara erişmeye çalışması için rastgele bir zamanda iş parçacığının yazmaç bağlamını zorla sıfırladığında.

  • Profil oluşturucu, çöp toplamayı yasaklayan bir geri çağırma yönteminden çöp toplamayı tetikleyen bilgilendirici bir yöntemi çağırmaya çalıştığında.

Bu iki senaryo aşağıdaki bölümlerde ele alınmaktadır.

Profil Oluşturucuları Ele Geçirme

(Ele geçirilmeyen profil oluşturucuların bu HRESULT'u görebileceği durumlar olsa da, bu senaryo öncelikli olarak profil oluşturucuların ele geçirilmesiyle ilgili bir sorundur.)

Bu senaryoda ele geçen bir profil oluşturucu, iş parçacığının profil oluşturucu kodu girebilmesi veya ICorProfilerInfo yöntemi aracılığıyla ortak dil çalışma zamanını (CLR) yeniden girebilmesi için rastgele bir zamanda iş parçacığının yazmaç bağlamını zorla sıfırlar.

Profil oluşturma API'sinin sağladığı kimliklerin çoğu CLR'deki veri yapılarına işaret eder. Çoğu ICorProfilerInfo çağrı yalnızca bu veri yapılarından gelen bilgileri okur ve bunları geri geçirir. Ancak, CLR bu yapılarda çalışırken bazı şeyleri değiştirebilir ve bunu yapmak için kilitleri kullanabilir. Profil oluşturucunun iş parçacığını ele geçirmesi sırasında CLR'nin zaten bir kilit tuttuğunu (veya almaya çalıştığı) varsayalım. İş parçacığı CLR'ye yeniden giriş yapıp daha fazla kilit almaya veya değiştirilme sürecinde olan yapıları incelemeye çalışırsa, bu yapılar tutarsız bir durumda olabilir. Kilitlenmeler ve erişim ihlalleri bu gibi durumlarda kolayca ortaya çıkabilir.

Genel olarak, ele geçirilmeyen bir profil oluşturucu kodu bir ICorProfilerCallback yöntemi içinde yürütür ve geçerli parametrelerle bir ICorProfilerInfo yönteme çağırırsa, kilitlenmemeli veya erişim ihlali almamalıdır. Örneğin, ICorProfilerCallback::ClassLoadFinished yönteminin içinde çalışan profil oluşturucu kodu , ICorProfilerInfo2::GetClassIDInfo2 yöntemini çağırarak sınıf hakkında bilgi isteyebilir. Kod, bilgilerin kullanılamadığını belirten bir CORPROF_E_DATAINCOMPLETE HRESULT alabilir. Ancak kilitlenmez veya erişim ihlali almaz. bu çağrıları ICorProfilerInfo bir ICorProfilerCallback yöntemden yapıldığından zaman uyumlu olarak kabul edilir.

Ancak, bir yöntem içinde olmayan kodu yürüten yönetilen bir ICorProfilerCallback iş parçacığı zaman uyumsuz bir çağrı yapıyor olarak kabul edilir. .NET Framework sürüm 1'de, zaman uyumsuz bir çağrıda neler olabileceğini belirlemek zordu. Arama kilitlenebilir, kilitlenebilir veya geçersiz bir yanıt verebilir. .NET Framework sürüm 2.0, bu sorundan kaçınmanıza yardımcı olacak bazı basit denetimler kullanıma sunulmuştur. .NET Framework 2.0'da, güvenli ICorProfilerInfo olmayan bir işlevi zaman uyumsuz olarak çağırırsanız, CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT ile başarısız olur.

Genel olarak, zaman uyumsuz çağrılar güvenli değildir. Ancak, aşağıdaki yöntemler güvenlidir ve özellikle zaman uyumsuz çağrıları destekler:

Daha fazla bilgi için CLR Profil Oluşturma API'sinin blogunda Neden CORPROF_E_UNSUPPORTED_CALL_SEQUENCE var ? girdisine bakın.

Çöp Toplamaları Tetikleme

Bu senaryo, çöp toplamayı yasaklayan bir geri çağırma yöntemi (örneğin yöntemlerden biri ICorProfilerCallback ) içinde çalışan bir profil oluşturucu içerir. Profil oluşturucu çöp toplamayı tetikleyebilecek bir bilgilendirme yöntemini (örneğin, arabirimdeki ICorProfilerInfo bir yöntemi) çağırmaya çalışırsa, bilgi yöntemi CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT ile başarısız olur.

Aşağıdaki tabloda, çöp toplamalarını yasaklayan geri çağırma yöntemleri ve atık toplamaları tetikleyebilecek bilgilendirıcı yöntemler görüntülenir. Profil oluşturucu listelenen geri çağırma yöntemlerinden birinin içinde yürütülürse ve listelenen bilgilendirici yöntemlerden birini çağırırsa, bu bilgilendirici yöntem CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT ile başarısız olur.

Çöp toplamayı yasaklayan geri çağırma yöntemleri Atık toplamayı tetikleyen bilgilendirsel yöntemler
ThreadAssignedToOSThread

ExceptionUnwindFunctionEnter

ExceptionUnwindFunctionLeave

ExceptionUnwindFinallyEnter

ExceptionUnwindFinallyLeave

ExceptionCatcherEnter

RuntimeSuspendStarted

RuntimeSuspendFinished

RuntimeSuspendAborted

RuntimeThreadSuspended

RuntimeThreadResumed

MovedReferences

Objectreferences

ObjectsAllocatedByClass

RootReferences2

Handlecreated

HandleDestroyed

GarbageCollectionStarted

GarbageCollectionFinished
GetILFunctionBodyAllocator

SetILFunctionBody

SetILInstrumentedCodeMap

ForceGC

GetClassFromToken

GetClassFromTokenAndTypeArgs

GetFunctionFromTokenAndTypeArgs

GetAppDomainInfo

EnumModules

RequestProfilerDetach

GetAppDomainsContainingModule

Ayrıca bkz.