using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main()
{
decimal totalElapsedTicks = 0;
// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();
// Do something
for (int i = 0; i < 100000; i++)
{
try
{
// Begin timing
stopwatch.Start();
RethrowException();
}catch
{
// Stop timing
stopwatch.Stop();
}
}
// Write result
Console.WriteLine("try/catch technique: {0:#,###,###,###}", stopwatch.ElapsedTicks);
stopwatch.Reset();
// Do something
for (int i = 0; i < 100000; i++)
{
try
{
// Begin timing
stopwatch.Start();
PassThroughException();
}catch
{
// Stop timing
stopwatch.Stop();
}
}
// Write result
Console.WriteLine("try/finaly technique: {0:#,###,###,###}", stopwatch.ElapsedTicks);
}
static void RethrowException()
{
try
{
throw new Exception();
}
catch
{
DummyMethod();
throw;
}
}
static void PassThroughException()
{
bool exceptionThrown = false;
try
{
exceptionThrown = true;
throw new Exception();
}
finally
{
if(exceptionThrown)
{
DummyMethod();
}
}
}
static int DummyMethod()
{
return 0;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CgpjbGFzcyBQcm9ncmFtCnsKICAgIHN0YXRpYyB2b2lkIE1haW4oKQogICAgewogICAgCiAgICBkZWNpbWFsIHRvdGFsRWxhcHNlZFRpY2tzID0gMDsJCiAgICAJCgkvLyBDcmVhdGUgbmV3IHN0b3B3YXRjaAoJU3RvcHdhdGNoIHN0b3B3YXRjaCA9IG5ldyBTdG9wd2F0Y2goKTsKCgoKCS8vIERvIHNvbWV0aGluZwoJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKCXsKCSAgICB0cnkKCSAgICB7CgkJCS8vIEJlZ2luIHRpbWluZwoJCQlzdG9wd2F0Y2guU3RhcnQoKTsKCQkJUmV0aHJvd0V4Y2VwdGlvbigpOwoKCSAgICAJCgkgICAgfWNhdGNoCgkgICAgewoJICAgIAkvLyBTdG9wIHRpbWluZwoJCQlzdG9wd2F0Y2guU3RvcCgpOwoJCQkKCSAgICB9Cgl9CgkvLyBXcml0ZSByZXN1bHQKCUNvbnNvbGUuV3JpdGVMaW5lKCJ0cnkvY2F0Y2ggdGVjaG5pcXVlOiB7MDojLCMjIywjIyMsIyMjfSIsIHN0b3B3YXRjaC5FbGFwc2VkVGlja3MpOwoJCgkKCXN0b3B3YXRjaC5SZXNldCgpOwoJLy8gRG8gc29tZXRoaW5nCglmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKQoJewoJICAgIHRyeQoJICAgIHsKCQkJLy8gQmVnaW4gdGltaW5nCgkJCXN0b3B3YXRjaC5TdGFydCgpOwoJCQlQYXNzVGhyb3VnaEV4Y2VwdGlvbigpOwoKCSAgICAJCgkgICAgfWNhdGNoCgkgICAgewoJICAgIAkvLyBTdG9wIHRpbWluZwoJCQlzdG9wd2F0Y2guU3RvcCgpOwoJCQkKCSAgICB9Cgl9CgkvLyBXcml0ZSByZXN1bHQKCUNvbnNvbGUuV3JpdGVMaW5lKCJ0cnkvZmluYWx5IHRlY2huaXF1ZTogezA6IywjIyMsIyMjLCMjI30iLCBzdG9wd2F0Y2guRWxhcHNlZFRpY2tzKTsKCQoJCgkKICAgIH0KICAgIAogICAgc3RhdGljIHZvaWQgUmV0aHJvd0V4Y2VwdGlvbigpCiAgICB7CgkJdHJ5CiAgICAgICAgeyAKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICBjYXRjaAogICAgICAgIHsKICAgIAkJRHVtbXlNZXRob2QoKTsKICAgICAgICAJdGhyb3c7CiAgICAgICAgfQogICAgfQogICAgCiAgICBzdGF0aWMgdm9pZCBQYXNzVGhyb3VnaEV4Y2VwdGlvbigpCiAgICB7CiAgICAJYm9vbCBleGNlcHRpb25UaHJvd24gPSBmYWxzZTsKICAgIAl0cnkKICAgICAgICB7IAogICAgICAgIAlleGNlcHRpb25UaHJvd24gPSB0cnVlOwogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkKICAgICAgICB7CiAgICAgICAgCWlmKGV4Y2VwdGlvblRocm93bikKICAgICAgICAJewogICAgICAgIAkJRHVtbXlNZXRob2QoKTsKICAgICAgICAJfQogICAgICAgICAgICAKICAgICAgICB9CiAgICB9CiAgICAKICAgIHN0YXRpYyBpbnQgRHVtbXlNZXRob2QoKSAKICAgIHsKICAgIAlyZXR1cm4gMDsJCiAgICB9CiAgICAKfQo=