Bu makalemizde hata yakalama yapısı olan try-catch bloğunun performansa etkisinden bahsedeceğiz. Bilindiği gibi .Net (Vb.Net, C#..) kodlarımızda herhangi bir satırda çıkan hatayı yönetmek için try-catch bloğu kullanırız, hata yakalama bloğu bu aşamada programın kapanmalarını engelleyebilmek için vazgeçilmezdir. Her ne kadar try-catch developer’lara yardımcı olsa da gereksiz kullanımlarda performans kayıplarına yol açabilir. Hatalar catch bloku içerisinde yakalanır, eğer burada hiçbir işlem yapılmadan hata bir üst katmana fırlatılıyorsa bu try catch bloğu aslında gereksizdir. İkinci bir exception fırlatılması ile performans olumsuz etkilenecektir.
Örnek :
Try
……………………………………………
Catch ex As Exception
Throw ex
End Try
……………………………………………
Catch ex As Exception
Throw ex
End Try
Yukarıdaki gibi bir kodlama yapılacak ise try cath’e gerek yoktur.
Try …………………………………………. Catch ex As Exception MsgBox(ex.Message) Throw ex End Try
Yukarıdaki gibi catch bloğunda bir işlem yapılacak ise kullanılması gerekmektedir. Genelde en son katmanda exceptionların yakalanması ve yönetilmesi daha doğru olacaktır. Eğer her katmanda hata yakalanır ve catch bloğunda işlem yapılmadan hata tekrar fırlatılırsa bu gereksiz performans kayıplarına yol açacaktır.
“Gereksiz Try-Catch bloklu kod”:
Private Sub WithTry() Try Throw New Exception("Hata") Catch ex As Exception Throw ex End Try End Sub
“Gereksiz try-Catch bloksuz kod”:
Private Sub WithOutTry()
Throw New Exception("Hata işte")
End Sub
Yukarıdaki fonksiyonları birer butona bağlayalım ve butonun click eventlerinde bu fonksiyonları çağıralım. En son katman bu click event’leri olduğu için kodlarımız try-catch bloklu olacaktır. Aşağıdaki kod çalıştığında yaklaşık 28 milisaniye gibi bir sürede işini tamamlıyor.
Private Sub btnWithTry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWithTry.Click
Dim objNow As DateTime = Now
Try
WithTry()
Catch ex As Exception
MsgBox(Now.Subtract(objNow).TotalMilliseconds)
End Try
End Sub
Aşağıdaki kod çalıştığında yaklaşık 14 milisaniye gibi bir sürede işini tamamlıyor.
Private Sub btnTry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTry.Click
Dim objNow As DateTime = Now
Try
WithOutTry()
Catch ex As Exception
MsgBox(Now.Subtract(objNow).TotalMilliseconds)
End Try
End Sub
Private Sub btnTry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTry.Click
Dim objNow As DateTime = Now
Try
WithOutTry()
Catch ex As Exception
MsgBox(Now.Subtract(objNow).TotalMilliseconds)
End Try
End Sub
Eğer catch bloğunda hatayı direk bir üst katmana ileteceksek try-catch bloğu kullanmamak performansı artıracaktır.
Armağan DÖKER
Yorumlar
Yorum Gönder