Merhaba,
Daha önceki yazılarda xml processing’in maliyetinden bahsetmiştik. En çok zaman kaybedilen yerlerden biri de Xsl çevrimleridir.
XslCompiledTransform sınıfının Load metodunu her çevrimde kullanmayıp önbellekten kullanarak ciddi kazançlar elde edilebilir.
Load metodu arka tarafta yeni bir assembly oluşturup derleme işlemi gerçekleştirdiği için zaman kaybına neden olmaktadır.
Örneğin 361 sn süren işlemin ekran görüntüsünü aşağıda görebilirsiniz:
361 sn’nin 248 sn’si xsl çevriminde geçmiş:
Bu sürenin de %79’u yani 197 sn’si CPU’da geçmiş.
Bu süreyi oluşturan xsl transformation işlemi aslında kısa süren bir işlem fakat yüzlerce kez tekrarlandığı için bu kadar çok zaman alıyor.
Aşağıdaki ekran görüntüsünde tek bir XSL transformation işlemi 217 ms zaman almış:
Bu işlem 1200 kez tekrarlanmış:
Yapılan iyileştirme sadece bir kaç satır kod değişikliği ile load metodunun 1200 kere değil sadece bir kez çalıştırılması:
public static string TransformToXMLString(string xslPath, string inputXML)
{
XslCompiledTransform xslTransform = null;
if (CacheMain.Cache[xslPath] != null)
{
xslTransform = (XslCompiledTransform)CacheMain.Cache[xslPath];
}
else
{
xslTransform = new XslCompiledTransform();
xslTransform.Load(xslPath);
TimeSpan timeOut = new TimeSpan(0, 0, 30, 0, 0);
CacheMain.Cache.Add(xslPath,
xslTransform, null, Cache.NoAbsoluteExpiration, timeOut, CacheItemPriority.NotRemovable, null);
}
return TransformToXMLString(xslTransform, inputXML);
}
http://blogs.msdn.com/b/spike/archive/2009/07/10/improving-xslcompiledtransform-performance.aspx adresinde load metodunun her defasında çalıştırılması durumunda aynı içeriğe sahip 3 xml dosyasının çevrim işleminin süreleri şu şekilde belirtilmiş:
..\..\Person_1.xml done, elapsed time (ms): 224
..\..\Person_2.xml done, elapsed time (ms): 117
..\..\Person_3.xml done, elapsed time (ms): 119
Load işleminin sadece bir kez yapılması durumunda aynı xml dosyalarının çevrim sürelerini aşağıda görebilirsiniz:
..\..\Person_1.xml done, elapsed time (ms): 211
..\..\Person_2.xml done, elapsed time (ms): 1
..\..\Person_3.xml done, elapsed time (ms): 1
119 ms’den 1 ms’ye düşmüş.
Tarık
Hiç yorum yok:
Yorum Gönder