Bunu, .NET'te çalıştırmak ve çalıştırmak için önemsiz yol yoktur. Ancak, bulduğum en basit yol, performans sayaçlarıyla çalışmak için bazı yetenekleri sağlayan Kurumsal Kütüphane'nin üzerine inşa etmektir. Örneğin, the Performance Counter Handler
Enterprise Library, performans sayaçlarının kurulumunu daha kolay yönetmek için bazı özellikler de sunar. Bu sadece kod saklanması verir
private static EnterpriseLibraryPerformanceCounter averageRequestTimeCounter = PerformanceCounterManager.GetEnterpriseLibraryCounter(MadPerformanceCountersListener.AverageRequestTime);
private static EnterpriseLibraryPerformanceCounter averageRequestTimeCounterBase = PerformanceCounterManager.GetEnterpriseLibraryCounter(MadPerformanceCountersListener.AverageRequestTimeBase);
public void DoSomethingWeWantToMonitor()
{
using (new AverageTimeMeter(averageRequestTimeCounter, averageRequestTimeCounterBase))
{
// code here that you want to perf mon
}
}
Bir de izlemek istiyorum:
Ayrıca, bunu yapmak sadece sağlayan bir AvergeTimeMeter oluşturabilir, Diyelim ki bu yüzden bunun üzerine inşa edelim blok kullanarak - ve tüm performans sayacı altyapısı hakkında endişelenmekten ziyade üzerinde çalışmak istediğiniz kod üzerinde yoğunlaşın.
Bunu yapmak için, aşağıdaki gibi yeniden kullanılabilir AverageTimeMeter sınıfını oluşturacağız:
public sealed class AverageTimeMeter : IDisposable
{
private EnterpriseLibraryPerformanceCounter averageCounter;
private EnterpriseLibraryPerformanceCounter baseCounter;
private Stopwatch stopWatch;
private string instanceName;
public AverageTimeMeter(EnterpriseLibraryPerformanceCounter averageCounter, EnterpriseLibraryPerformanceCounter baseCounter, string instanceName = null)
{
this.stopWatch = new Stopwatch();
this.averageCounter = averageCounter;
this.baseCounter = baseCounter;
this.instanceName = instanceName;
this.stopWatch.Start();
}
public void Dispose()
{
this.stopWatch.Stop();
if (this.baseCounter != null)
{
this.baseCounter.Increment();
}
if (this.averageCounter != null)
{
if (string.IsNullOrEmpty(this.instanceName))
{
this.averageCounter.IncrementBy(this.stopWatch.ElapsedTicks);
}
else
{
this.averageCounter.SetValueFor(this.instanceName, this.averageCounter.Value + this.stopWatch.ElapsedTicks);
}
}
}
}
Sen (EntLib örneklerde gösterildiği) performans sayaçlarını kaydetmek zorunda ama bu başlangıç yapmanız.
Belki de basit bir Regex motorunu uygulamaya çalıştığımı açıklamalıydım. Durma saati bunun için yeterince doğru olacak mı? –
@Paul Matthews - iyi olacak. Kronometre çözünürlüğü – Oded
numaralı kronometredir. Kodunuzun performansını ölçmek için yeterince doğru, eğer sormak istediğiniz buysa. Performansı ölçüyorsanız, Visual Studio dışındaki Sürüm modunda kod çalıştırmayı unutmayın. Ayrıca, performansı ölçmek için bir profil oluşturucu kullanmanızı tavsiye ederim, kodun performansıyla ilgili basit bir noktadan noktaya zaman ölçümünden çok daha fazlasını anlatacağım. – driis