Aracılığıyla paylaş


Profil Oluşturmaya Genel Bakış

Profil oluşturucu, başka bir uygulamanın yürütülmesini izleyen bir araçtır. Ortak dil çalışma zamanı (CLR) profil oluşturucu, profil oluşturma API'sini kullanarak CLR'den ileti alan ve clr'ye ileti gönderen işlevlerden oluşan dinamik bağlantı kitaplığıdır (DLL). Profil oluşturucu DLL'i çalışma zamanında CLR tarafından yüklenir.

Geleneksel profil oluşturma araçları, uygulamanın yürütülmesini ölçmeye odaklanır. Başka bir ifadeyle, her işlevde harcanan zamanı veya uygulamanın zaman içindeki bellek kullanımını ölçerler. Profil oluşturma API'si, kod kapsamı yardımcı programları ve hatta gelişmiş hata ayıklama yardımcıları gibi daha geniş bir tanılama araçları sınıfını hedefler. Bu kullanımların hepsi doğası gereği tanılamadır. Profil oluşturma API'si yalnızca bir uygulamanın yürütülmesini ölçer, aynı zamanda izler. Bu nedenle profil oluşturma API'sinin hiçbir zaman uygulamanın kendisi tarafından kullanılmaması ve uygulamanın yürütülmesi profil oluşturucuya bağlı olmamalıdır (veya bundan etkilenmemelidir).

BIR CLR uygulamasının profilini oluşturmak, geleneksel olarak derlenmiş makine kodunun profilini oluşturmaktan daha fazla destek gerektirir. Bunun nedeni, CLR'nin uygulama etki alanları, çöp toplama, yönetilen özel durum işleme, kodun tam zamanında (JIT) derlenmesi (ortak ara dili veya CIL, kodu yerel makine koduna dönüştürme) ve benzer özellikler gibi kavramları tanıtmasıdır. Geleneksel profil oluşturma mekanizmaları bu özellikleri belirleyemez veya bu özellikler hakkında yararlı bilgiler sağlayamaz. Profil oluşturma API'si bu eksik bilgileri verimli bir şekilde sağlar ve CLR'nin ve profili oluşturulan uygulamanın performansı üzerinde en az etkiye sahiptir.

Çalışma zamanında JIT derlemesi profil oluşturma için iyi fırsatlar sağlar. Profil oluşturma API'si, profil oluşturucunun JIT derlemesi öncesinde bir yordam için bellek içi CIL kod akışını değiştirmesini sağlar. Bu şekilde, profil oluşturucu daha derin araştırma gerektiren belirli yordamlara dinamik olarak izleme kodu ekleyebilir. Bu yaklaşım geleneksel senaryolarda mümkün olsa da, profil oluşturma API'sini kullanarak CLR için uygulamak çok daha kolaydır.

Profil Oluşturma API'si

Profil oluşturma API'si genellikle yönetilen bir uygulamanın yürütülmesini izleyen bir program olan bir kod profil oluşturucu yazmak için kullanılır.

Profil oluşturma API'si, profili oluşturulan uygulamayla aynı işleme yüklenen bir profil oluşturucu DLL'i tarafından kullanılır. Profil oluşturucu DLL bir geri çağırma arabirimi uygular (.NET Framework sürüm 1.0 ve 1.1'de ICorProfilerCallback , sürüm 2.0 ve sonraki sürümlerde ICorProfilerCallback2 ). CLR, profili oluşturulan işlemdeki olayların profil oluşturucusunu bilgilendirmek için bu arabirimdeki yöntemleri çağırır. Profil oluşturucu, profili oluşturulan uygulamanın durumu hakkında bilgi edinmek için ICorProfilerInfo ve ICorProfilerInfo2 arabirimlerindeki yöntemleri kullanarak çalışma zamanına geri çağrı yapabilir.

Not

Profil oluşturucu çözümünün yalnızca veri toplama bölümü, profili oluşturulan uygulamayla aynı işlemde çalışıyor olmalıdır. Tüm kullanıcı arabirimi ve veri analizi ayrı bir işlemde gerçekleştirilmelidir.

Aşağıdaki çizimde, profil oluşturucu DLL'sinin profili oluşturulan uygulama ve CLR ile nasıl etkileşime geçtiğini gösterir.

Profil oluşturma mimarisini gösteren ekran görüntüsü.

Bildirim Arabirimleri

ICorProfilerCallback ve ICorProfilerCallback2 bildirim arabirimleri olarak kabul edilebilir. Bu arabirimler ClassLoadStarted, ClassLoadFinished ve JITCompilationStarted gibi yöntemlerden oluşur. CLR bir sınıfı her yüklediğinde veya kaldırdığından, bir işlev derlediğinde vb. profil oluşturucunun ICorProfilerCallback veya ICorProfilerCallback2 arabiriminde ilgili yöntemi çağırır.

Örneğin, bir profil oluşturucu iki bildirim işlevi aracılığıyla kod performansını ölçebilir: FunctionEnter2 ve FunctionLeave2. Yalnızca her bildirimi zaman damgalar, sonuçları biriktirir ve uygulamanın yürütülmesi sırasında en fazla CPU veya duvar saati süresi tüketen işlevleri gösteren bir liste oluşturur.

Bilgi Alma Arabirimleri

Profil oluşturmada yer alan diğer ana arabirimler ICorProfilerInfo ve ICorProfilerInfo2'dir. Profil oluşturucu, analizine yardımcı olmak üzere daha fazla bilgi edinmek için bu arabirimleri gerektiği gibi çağırır. Örneğin, CLR FunctionEnter2 işlevini her çağırışında bir işlev tanımlayıcısı sağlar. Profil oluşturucu, işlevin üst sınıfını, adını vb. bulmak için ICorProfilerInfo2::GetFunctionInfo2 yöntemini çağırarak bu işlev hakkında daha fazla bilgi alabilir.

Desteklenen Özellikler

Profil oluşturma API'si, ortak dil çalışma zamanında gerçekleşen çeşitli olaylar ve eylemler hakkında bilgi sağlar. İşlemlerin iç çalışmalarını izlemek ve .NET Framework uygulamanızın performansını analiz etmek için bu bilgileri kullanabilirsiniz.

Profil oluşturma API'si, CLR'de gerçekleşen aşağıdaki eylemler ve olaylar hakkında bilgi alır:

  • CLR başlatma ve kapatma olayları.

  • Uygulama etki alanı oluşturma ve kapatma olayları.

  • Derleme yükleme ve kaldırma olayları.

  • Modül yükleme ve kaldırma olayları.

  • COM vtable oluşturma ve yok etme olayları.

  • Tam zamanında (JIT) derleme ve kod sunum olayları.

  • Sınıf yükleme ve kaldırma olayları.

  • İş parçacığı oluşturma ve yok etme olayları.

  • İşlev girişi ve çıkış olayları.

  • Özel Durumlar.

  • Yönetilen ve yönetilmeyen kod yürütme arasındaki geçişler.

  • Farklı çalışma zamanı bağlamları arasında geçişler.

  • Çalışma zamanı askıya alma işlemleri hakkında bilgi.

  • Çalışma zamanı bellek yığını ve çöp toplama etkinliği hakkında bilgi.

Profil oluşturma API'sini herhangi bir (yönetilmeyen) COM uyumlu dilden çağırabilirsiniz.

API, CPU ve bellek tüketimi açısından verimlidir. Profil oluşturma, profili oluşturulmuş uygulamada yanıltıcı sonuçlara neden olacak kadar önemli değişiklikler içermez.

Profil oluşturma API'si hem örnekleme hem de örnekleme olmayan profil oluşturucular için kullanışlıdır. Örnekleme profil oluşturucu , profili 5 milisaniye arayla normal saat değerlerinde inceler. Örnekleme olmayan bir profil oluşturucu , olaya neden olan iş parçacığıyla zaman uyumlu bir şekilde bir olay hakkında bilgilendirilir.

Desteklenmeyen İşlev

Profil oluşturma API'si aşağıdaki işlevleri desteklemez:

  • Geleneksel Win32 yöntemleri kullanılarak profili oluşturulmalıdır yönetilmeyen kod. Ancak CLR profil oluşturucu, yönetilen ve yönetilmeyen kod arasındaki sınırları belirlemek için geçiş olayları içerir.

  • Kendi kodunu en boy odaklı programlama gibi amaçlarla değiştiren kendi kendini değiştiren uygulamalar.

  • Profil oluşturma API'sinin bu bilgileri sağlamaması nedeniyle sınır denetimi. CLR, tüm yönetilen kodun sınır denetimi için iç destek sağlar.

  • Aşağıdaki nedenlerle desteklenmeyen uzaktan profil oluşturma:

    • Uzaktan profil oluşturma, yürütme süresini uzatır. Profil oluşturma arabirimlerini kullandığınızda, profil oluşturma sonuçlarının gereksiz şekilde etkilenmemesi için yürütme süresini en aza indirmeniz gerekir. Bu durum özellikle yürütme performansı izlenirken geçerlidir. Ancak, profil oluşturma arabirimleri bellek kullanımını izlemek veya yığın çerçeveleri, nesneler vb. hakkında çalışma zamanı bilgilerini almak için kullanıldığında, uzaktan profil oluşturma bir sınırlama değildir.

    • CLR kod profil oluşturucusunun, profili oluşturulan uygulamanın çalıştığı yerel bilgisayarda çalışma zamanına bir veya daha fazla geri çağırma arabirimi kaydetmesi gerekir. Bu, uzak kod profil oluşturucu oluşturma özelliğini sınırlar.

Bildirim İş Parçacıkları

Çoğu durumda, bir olay oluşturan iş parçacığı da bildirimleri yürütür. Bu tür bildirimlerin (örneğin, FunctionEnter ve FunctionLeave) açık ThreadIDsağlamaları gerekmez. Ayrıca profil oluşturucu, etkilenen iş parçacığına bağlı olarak ThreadID analiz bloklarını genel depolamada dizine almak yerine analiz bloklarını depolamak ve güncelleştirmek için iş parçacığı yerel depolamayı kullanmaya karar verebilir.

Bu geri çağırmaların serileştirilmediğini unutmayın. Kullanıcıların, iş parçacığı açısından güvenli veri yapıları oluşturarak ve birden çok iş parçacığından paralel erişimi önlemek için gerektiğinde profil oluşturucu kodunu kilitleyerek kodlarını korumaları gerekir. Bu nedenle, bazı durumlarda olağan dışı bir geri çağırma dizisi alabilirsiniz. Örneğin, yönetilen bir uygulamanın aynı kodu yürüten iki iş parçacığı oluşturduğunu varsayalım. Bu durumda, ICorProfilerCallback::JITCompilationFinished geri çağırmasını almadan önce bir iş parçacığından bazı işlevler için ICorProfilerCallback::JITCompilationStarted olayı ve FunctionEnter diğer iş parçacığından geri çağırma almak mümkündür. Bu durumda, kullanıcı henüz tam olarak tam zamanında (JIT) derlenmemiş bir işlev için geri çağırma alır FunctionEnter .

Güvenlik

Profil oluşturucu DLL'i, ortak dil çalışma zamanı yürütme altyapısının bir parçası olarak çalışan yönetilmeyen bir DLL'dir. Sonuç olarak, profil oluşturucu DLL'sindeki kod yönetilen kod erişim güvenliği kısıtlamalarına tabi değildir. Profil oluşturucu DLL'sinin tek sınırlamaları, işletim sistemi tarafından profili oluşturulan uygulamayı çalıştıran kullanıcıya uygulananlardır.

Profil oluşturucu yazarları güvenlikle ilgili sorunları önlemek için uygun önlemleri almalıdır. Örneğin, yükleme sırasında, kötü amaçlı bir kullanıcının değiştirememesi için erişim denetimi listesine (ACL) bir profil oluşturucu DLL'si eklenmelidir.

Bir Kod Profil Oluşturucuda Yönetilen ve Yönetilmeyen Kodu Birleştirme

Yanlış yazılmış bir profil oluşturucu kendisine döngüsel başvurulara neden olabilir ve öngörülemeyen davranışlara neden olabilir.

CLR profil oluşturma API'sinin gözden geçirilmesi, COM birlikte çalışma veya dolaylı çağrılar aracılığıyla birbirini çağıran yönetilen ve yönetilmeyen bileşenler içeren bir profil oluşturucu yazabileceğiniz izlenimini oluşturabilir.

Bu, tasarım açısından mümkün olsa da profil oluşturma API'si yönetilen bileşenleri desteklemez. CLR profil oluşturucu tamamen yönetilmeyen olmalıdır. Yönetilen ve yönetilmeyen kodu clr profil oluşturucuda birleştirme girişimleri erişim ihlallerine, program hatalarına veya kilitlenmelere neden olabilir. Profil oluşturucunun yönetilen bileşenleri olayları yönetilmeyen bileşenlerine geri gönderir ve bu da yönetilen bileşenleri yeniden çağırarak döngüsel başvurulara neden olur.

BIR CLR profil oluşturucunun yönetilen kodu güvenli bir şekilde çağırabildiği tek konum, bir yöntemin ortak ara dil (CIL) gövdesindedir. CIL gövdesini değiştirmek için önerilen uygulama, ICorProfilerCallback4 arabiriminde JIT yeniden derleme yöntemlerini kullanmaktır.

CIL'yi değiştirmek için eski izleme yöntemlerini kullanmak da mümkündür. Bir işlevin tam zamanında (JIT) derlemesi tamamlanmadan önce, profil oluşturucu bir yöntemin CIL gövdesine yönetilen çağrılar ekleyebilir ve ardından JIT ile derleyebilir (bkz . ICorProfilerInfo::GetILFunctionBody yöntemi). Bu teknik, yönetilen kodun seçmeli izlemesi için veya JIT ile ilgili istatistikleri ve performans verilerini toplamak için başarıyla kullanılabilir.

Alternatif olarak, bir kod profil oluşturucu yönetilmeyen koda çağrıda bulunan her yönetilen işlevin CIL gövdesine yerel kancalar ekleyebilir. Bu teknik izleme ve kapsam için kullanılabilir. Örneğin, bir kod profil oluşturucu bloğun yürütülmesini sağlamak için her CIL bloğundan sonra izleme kancaları ekleyebilir. Bir yöntemin CIL gövdesinin değiştirilmesi çok hassas bir işlemdir ve dikkate alınması gereken birçok faktör vardır.

Yönetilmeyen Kod Profili Oluşturma

Ortak dil çalışma zamanı (CLR) profil oluşturma API'si yönetilmeyen kodun profilini oluşturmak için minimum destek sağlar. Aşağıdaki işlevsellik sağlanır:

  • Yığın zincirlerinin sabit listesi. Bu özellik, bir kod profil oluşturucunun yönetilen kod ile yönetilmeyen kod arasındaki sınırı belirlemesini sağlar.

  • Yığın zincirinin yönetilen koda mı yoksa yerel koda mı karşılık olduğunu belirleme.

.NET Framework 1.0 ve 1.1 sürümlerinde, bu yöntemler CLR hata ayıklama API'sinin işlem içi alt kümesi aracılığıyla kullanılabilir. Bunlar CorDebug.idl dosyasında tanımlanır.

.NET Framework 2.0 ve sonraki sürümlerinde, bu işlevsellik için ICorProfilerInfo2::D oStackSnapshot yöntemini kullanabilirsiniz.

COM kullanma

Profil oluşturma arabirimleri COM arabirimleri olarak tanımlansa da, ortak dil çalışma zamanı (CLR) aslında bu arabirimleri kullanmak için COM'yi başlatmaz. Bunun nedeni, yönetilen uygulamanın istenen iş parçacığı modelini belirtme şansına sahip olmadan önce CoInitialize işlevini kullanarak iş parçacığı modelini ayarlamak zorunda kalmamaktır. Benzer şekilde, profili oluşturulan uygulamayla uyumlu olmayan ve uygulamanın başarısız olmasına neden olabilecek bir iş parçacığı modeli seçebileceğinden, profil oluşturucunun kendisini çağırmamalıdır CoInitialize.

Çağrı Yığınları

Profil oluşturma API'si, çağrı yığınlarını almak için iki yol sağlar: çağrı yığınlarının seyrek toplanmasına olanak tanıyan bir yığın anlık görüntüsü yöntemi ve her anında çağrı yığınını izleyen bir gölge yığın yöntemi.

Yığın Anlık Görüntüsü

Yığın anlık görüntüsü, zaman içinde bir iş parçacığı yığınının bir anlık izlemesidir. Profil oluşturma API'si, yığındaki yönetilen işlevlerin izlemeyi destekler, ancak yönetilmeyen işlevlerin izlemesini profil oluşturucunun kendi yığın yürütücüsününe bırakır.

Profil oluşturucuyu yönetilen yığınlarda yürüyecek şekilde programlama hakkında daha fazla bilgi için bu belge kümesindeki ICorProfilerInfo2::D oStackSnapshot yöntemine ve .NET Framework 2.0: Temel bilgiler ve Ötesi'nde Profiler Stack Walking'e bakın.

Gölge Yığın

Anlık görüntü yöntemini çok sık kullanmak hızla bir performans sorunu oluşturabilir. Yığın izlemelerini sık sık almak istiyorsanız, profil oluşturucunuzun bunun yerine FunctionEnter2, FunctionLeave2, FunctionTailcall2 ve ICorProfilerCallback2 özel durum geri çağırmalarını kullanarak bir gölge yığın oluşturması gerekir. Gölge yığın her zaman günceldir ve yığın anlık görüntüsü gerektiğinde hızla depolama alanına kopyalanabilir.

Gölge yığın işlev bağımsız değişkenlerini, dönüş değerlerini ve genel örneklemelerle ilgili bilgileri alabilir. Bu bilgiler yalnızca gölge yığın aracılığıyla kullanılabilir ve denetim bir işleve teslim edildiğinde alınabilir. Ancak, bu bilgiler daha sonra işlevin çalıştırılması sırasında kullanılamayabilir.

Geri Çağırmalar ve Yığın Derinliği

Profil oluşturucu geri çağırmaları çok kısıtlı durumlarda verilebilir ve profil oluşturucu geri çağırmasında yığın taşması anında işlem çıkışına yol açar. Profil oluşturucu, geri çağırmalara yanıt olarak mümkün olduğunca az yığın kullandığınızdan emin olmalıdır. Profil oluşturucu, yığın taşmasına karşı sağlam işlemlerde kullanılmak üzere tasarlanmışsa, profil oluşturucunun kendisi de yığın taşmasını tetiklemekten kaçınmalıdır.

Ünvan Açıklama
Profil Oluşturma Ortamını Ayarlama Bir profil oluşturucu başlatmayı, olay bildirimlerini ayarlamayı ve bir Windows Hizmetinin profilini oluşturmayı açıklar.
Profil Oluşturma Arabirimleri Profil oluşturma API'sinin kullandığı yönetilmeyen arabirimleri açıklar.
Profil Oluşturma Genel Statik İşlevleri Profil oluşturma API'sinin kullandığı yönetilmeyen genel statik işlevleri açıklar.
Profil Oluşturma Sabit Listeleri Profil oluşturma API'sinin kullandığı yönetilmeyen numaralandırmaları açıklar.
Profil Oluşturma Yapıları Profil oluşturma API'sinin kullandığı yönetilmeyen yapıları açıklar.