I run Code Analysis and got this message:
CA1822 : Microsoft.Performance : The ‘this’ parameter (or ‘Me’ in
Visual Basic) of ‘CreateIntervalString(TimeSpan)’ is never used. Mark
the member as static (or Shared in Visual Basic) or use ‘this’/’Me’ in
the method body or at least one property accessor, if appropriate.
My code is:
private string CreateIntervalString(TimeSpan timeSpan)
{
return timeSpan.ToString();
}
as I understood, because CreateIntervalString function does not use any the members of the class, and only uses on the timeSpan input, VisualStudio recommends me to mark it as static.
My Questions:
- Why when I mark it as static, the performance is improved?
- My function is part of library that should be thread-safe, does marking method as static prevent this?
- I have additional private functions that use only its inputs, and does not use at any other members of the class, yet I don’t get the same error for them.
Thanks a lot!
Examples:
the following method provides an error:
private string CreateIntervalString(TimeSpan timeSpan)
{
return timeSpan.ToString();
}
and the following does not:
private DateTime ParseDateString(string dateTimeString)
{
// the years,monthe,days,hours,minutes and secondes found by the dateTimeString input
return new DateTime(years, months, days, hours, minutes, secondes);
}
The performance is not improved (in any way that matters), but the code gets clearer. The method doesn’t make the impression that it uses the instance, and you can use the method without creating an instance of the class.
As you are not using the instance from the method, it doesn’t affect the status of thread safety. As the method only uses the data that is sent to it, it is thread safe.
Either you actually use some instance member in the methods, there is something in the code that could potentially use some instance member, or there is something in the code that makes the tool think that it does.