|
Thanks Spacix,
I think when you get exception, and uncaught it, your program will terminate and you will get information from console, for example. In this way, you can know what exception happens.
So, no need to catch all exceptions, right?
regards,
George
|
|
|
|
|
Thanks Derek,
1.
Derek Bartram wrote: to avoid using try...catch as much as possible due to the massive performance hit it
Do you mean catching all exception will degrade performance or you mean generally exception handling approach will degrade performance?
2.
Do you have any documents to support your points?
regards,
George
|
|
|
|
|
|
Thanks Derek,
Cool!!
Your 1st link is Java...
I am interested in your 2nd link. But confused what means "catching untestable errors" and
"not controlling programming flow"? Could you show some samples please?
regards,
George
|
|
|
|
|
George_George wrote: But confused what means "catching untestable errors"
//writer is a stream writer to a file..
try
{
writer.Write("Hello");
}
catch (Exception err)
{
//handle error
}
In this case you couldn't test for every possible error as some are far out the scope of plausible; e.g. can't access the file as it was on a removable drive that was just unplugged.
George_George wrote: "not controlling programming flow"?
//slider is a silder whos value is 0 to 100
double y = 100.0 / slider.Value
then
try
{
double y = 100.0 / slider.Value
}
catch (Exception)
{
//handler exception
}
is a bad way to write this code (remembing slider.Value could be 0 causing divide by 0 exception), a better way would be....
if (slider.Value != 0)
{
double y = 100.0 / slider.Value
}
else
{
handle error
}
|
|
|
|
|
Thanks Derek,
I agree with your sample one. But for the sample two, I can not see any advantage for the 1st sample. Because for the 2nd you preferred sample, when we write code for "handle error" in else bracket, we usually throw exception. So, both samples have the same effect of exception thrown when we met with divide by zero issues.
So, what do you think are the advantages?
try
{
double y = 100.0 / slider.Value
}
catch (Exception)
{
}
is a bad way to write this code (remembing slider.Value could be 0 causing divide by 0 exception), a better way would be....
if (slider.Value != 0)
{
double y = 100.0 / slider.Value
}
else
{
handle error
}
regards,
George
|
|
|
|
|
The point is sample two doesn't throw an exception but rather just run a different section of code. An if statement inherinatly has less overhead than that of a try...catch statement. Certainly both will perform exactly the same function however the second will run more efficiently and quicker.
|
|
|
|
|
Thanks for your clarification, Derek!
It is clear now.
regards,
George
|
|
|
|
|
Derek Bartram wrote: massive performance hit
Perhaps you haven't read this[^] yet.
|
|
|
|
|
Thanks for the link, an interesting article. I probably didn't specify 'massive' which didn't help; I meant relative to performing an if test to prevent the exception.
|
|
|
|
|
Thanks Derek,
What do you mean "didn't specify 'massive' which didn't help" and "relative to performing an if test to prevent the exception"? Could you show more description or some pseudo code about your approach please?
regards,
George
|
|
|
|
|
Firstly, from above
//writer is a stream writer to a file..
try
{
writer.Write("Hello");
}
catch (Exception err)
{
//handle error
}
In this case you couldn't test for every possible error as some are far out the scope of plausible; e.g. can't access the file as it was on a removable drive that was just unplugged.
George_George wrote:
"not controlling programming flow"?
//slider is a silder whos value is 0 to 100
double y = 100.0 / slider.Value
then
try
{
double y = 100.0 / slider.Value
}
catch (Exception)
{
//handler exception
}
is a bad way to write this code (remembing slider.Value could be 0 causing divide by 0 exception), a better way would be....
if (slider.Value != 0)
{
double y = 100.0 / slider.Value
}
else
{
handle error
}
George_George wrote: What do you mean "didn't specify 'massive' which didn't help"
It's all very well saying massive improvement or whatever, but if you don't give some quantative value or referance, massive has no meaning (it could save 0.1ms which in terms of clock cycle is alot, but probably less significant to compared to a complex if statement).
|
|
|
|
|
Thanks Derek,
So, "massive improvement" you mean performance improvements?
regards,
George
|
|
|
|
|
Yes. Although perhaps also in terms of code style.
|
|
|
|
|
Thanks Derek,
It is clear now. Sorry for my bad English.
regards,
George
|
|
|
|
|
No problem. Your english is VERY good, certainly better than my other languages
|
|
|
|
|
Thanks for your patience to help me, Derek!
I think one of the most important things for developer is to be patience to learn new things.
regards,
George
|
|
|
|
|
Thanks PIEBALDconsult,
Good reference.
regards,
George
|
|
|
|
|
Hi Spacix,
I doubt whether your approach could achieve the same effect as using Application.ThreadException or AppDomain.CurrentDomain.UnhandledException (suppose there are multple threads)? Any comments?
regards,
George
|
|
|
|
|
George_George wrote: Application.ThreadException is for Windows Form application, not console and Windows Service application?
I don't think that there is a method to do this on console applications. In windows applications, you can hook event handlers to Application.ThreadException or AppDomain.CurrentDomain.UnhandledException . But these event handlers won't be executed in all cases. If the exception is occurring before the event handler is hooked, it won't be handled. Also exceptions occurring in unmanaged resources won't be handled too.
|
|
|
|
|
Thanks N a v a n e e t h,
What do you mean "windows applications"? I have checked again in VS 2008, there is not a project type names "windows applications". Do you mean Windows Forms application?
regards,
George
|
|
|
|
|
George_George wrote: Windows Forms application?
Yes. Also you can wrap the main() method in try catch blocks. So it can handle all exceptions.
|
|
|
|
|
No, N a v a n e e t h. Not catch all exceptions, you can not catch exception from other threads? Right?
regards,
George
|
|
|
|
|
George_George wrote: you can not catch exception from other threads? Right?
Yes. You are right. I missed that. Hook AppDomain.UnhandledException which handles all exception other than the ones I specified in my first message.
|
|
|
|
|
You mean "Also exceptions occurring in unmanaged resources won't be handled too" will not be handled?
regards,
George
|
|
|
|