M
Matthew Caesar
I've written some code in the C# programming language. I have a lot of
calls to a function that prints out some debugging information. I
would like to occasionally remove all calls to these functions when I
want the program to run quickly (when I'm measuring how fast it runs)
but I want the calls to be in when I'm debugging.
More detail: I have a class called MyDebug with a member called Trace.
I periodically call MyDebug.Trace("string with debugging info...").
Solutions that aren't sufficient:
- I don't want to have to comment out all calls to this function every
time I want to do performance analysis, because there are LOTS of
calls and this would take a long time.
- I can't simply modify the function to return null instead of
printing, because the arguments to the function take a lot of overhead
to compute. For example, I may call MyDebug.Trace("val1
"+val1.ToString()+"val2"+val2.ToString()), which has to concatenate
several strings together, which causes a lot of overhead. I don't want
the argument to be evaluated in the first place.
I suspect there must be a solution for this, since C++ has a nice way
to solve this:
(from http://www-subatech.in2p3.fr/~photons/subatech/soft/carnac/CPP-DEB-2.shtml)
#define assert(THETEST) ((void)0)
makes it so all calls to assert go away.
My question then is, how can I remove all calls to a function in C#,
without commenting the calls out (takes too long) and so that the
arguments aren't evaluated?
Thanks a lot for your help.
calls to a function that prints out some debugging information. I
would like to occasionally remove all calls to these functions when I
want the program to run quickly (when I'm measuring how fast it runs)
but I want the calls to be in when I'm debugging.
More detail: I have a class called MyDebug with a member called Trace.
I periodically call MyDebug.Trace("string with debugging info...").
Solutions that aren't sufficient:
- I don't want to have to comment out all calls to this function every
time I want to do performance analysis, because there are LOTS of
calls and this would take a long time.
- I can't simply modify the function to return null instead of
printing, because the arguments to the function take a lot of overhead
to compute. For example, I may call MyDebug.Trace("val1
"+val1.ToString()+"val2"+val2.ToString()), which has to concatenate
several strings together, which causes a lot of overhead. I don't want
the argument to be evaluated in the first place.
I suspect there must be a solution for this, since C++ has a nice way
to solve this:
(from http://www-subatech.in2p3.fr/~photons/subatech/soft/carnac/CPP-DEB-2.shtml)
#define assert(THETEST) ((void)0)
makes it so all calls to assert go away.
My question then is, how can I remove all calls to a function in C#,
without commenting the calls out (takes too long) and so that the
arguments aren't evaluated?
Thanks a lot for your help.