Aracılığıyla paylaş


SuppressGCTransitionAttribute Sınıf

Tanım

Yönetilmeyen bir işlev çağrısı yapıldığında çöp toplama geçişinin atlanması gerektiğini gösterir.

public ref class SuppressGCTransitionAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class SuppressGCTransitionAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type SuppressGCTransitionAttribute = class
    inherit Attribute
Public NotInheritable Class SuppressGCTransitionAttribute
Inherits Attribute
Devralma
SuppressGCTransitionAttribute
Öznitelikler

Açıklamalar

olmadan DllImportAttributebir yönteme uygulandığında bu öznitelik yoksayılır.

Bu geçişin aşılması, geçişin maliyeti yönetilmeyen işlevin yürütme süresinden fazla olduğunda avantaj sağlayabilir. Ancak bu geçişten kaçınmak, çalışma zamanının normal bir P/Invoke aracılığıyla sağladığı garantilerden bazılarını kaldırır. Yönetilmeyen bir işlev girmek için yönetilen çalışma zamanından çıkarken, GC'nin Kooperatif modundan Preemptive moduna geçmesi gerekir. Bu modlarla ilgili tüm ayrıntılar adresinde https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8bulunabilir. GC geçişini gizleme gelişmiş bir senaryodur ve olası sonuçları tam olarak anlamadan yapılmamalıdır.

Bu sonuçlardan biri , Karma mod hata ayıklamayı etkiler. Karma mod hata ayıklaması sırasında, bu öznitelikle işaretlenmiş bir P/Invoke içinde kesme noktalarına girmek veya bunları ayarlamak mümkün değildir. Geçici çözüm, yerel hata ayıklamaya geçmek ve yerel işlevde bir kesme noktası ayarlamaktır. Genel olarak, P/Invoke hata ayıklaması önemliyse( örneğin, yerel kodda adım adım ilerleyerek veya yerel koddan oluşan bir özel durumu tanılamak) bu özniteliğin kullanılması önerilmez.

Bu özniteliğin uygulandığı P/Invoke yöntemi aşağıdaki özelliklerin tümüne sahip olmalıdır:

  • Yerel işlev her zaman önemsiz bir süre boyunca (1 mikrosaniyeden az) yürütülür.
  • Native işlevi engelleyen bir syscall (örneğin, herhangi bir G/Ç türü) gerçekleştirmez.
  • Yerel işlev çalışma zamanına geri çağrı yapmaz (örneğin, Ters P/Invoke).
  • Native işlevi özel durumlar oluşturmaz.
  • Yerel işlev kilitleri veya diğer eşzamanlılık temel öğelerini işlemez.

Bu özniteliğin geçersiz kullanımlarının sonuçları şunlardır:

  • GC açlığı.
  • Anında çalışma zamanı sonlandırma.
  • Veri bozulması.

Bu özniteliğin uygulanması P/Invoke dışarı aktarma işleminin daha önce JIT derlenen çağırma yönteminin yan etkisi olarak bağlanmasına neden olabilir. EntryPointNotFoundException veya diğer özel durumlar, özniteliğin uygulanmadığından daha önce oluşturulabilir.

Oluşturucular

SuppressGCTransitionAttribute()

Örnek oluşturucu.

Özellikler

TypeId

Türetilmiş bir sınıfta uygulandığında, bu Attributeiçin benzersiz bir tanımlayıcı alır.

(Devralındığı yer: Attribute)

Yöntemler

Equals(Object)

Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

(Devralındığı yer: Attribute)
GetHashCode()

Bu örneğe ilişkin karma kodu döndürür.

(Devralındığı yer: Attribute)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
IsDefaultAttribute()

Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin değerinin türetilmiş sınıf için varsayılan değer olup olmadığını gösterir.

(Devralındığı yer: Attribute)
Match(Object)

Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür.

(Devralındığı yer: Attribute)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır