代码分析c#.NET CA1822

RRR*_*RRR 1 c# static code-analysis

我运行代码分析并收到此消息:

CA1822:Microsoft.Performance:从不使用'CreateIntervalString(TimeSpan)'中的'this'参数(或Visual Basic中的'Me').将成员标记为静态(或在Visual Basic中为Shared)或在方法体中使用"this"/"Me"或至少使用一个属性访问器(如果适用).

我的代码是:

private string CreateIntervalString(TimeSpan timeSpan)
{
    return timeSpan.ToString();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,因为CreateIntervalString函数不使用类的任何成员,并且只使用timeSpan输入,VisualStudio建议我将其标记为静态.

我的问题:

  1. 为什么当我将其标记为静态时,性能会得到改善?
  2. 我的函数是库的一部分应该是线程安全的,标记方法是否为静态阻止这个?
  3. 我有额外的私有函数只使用它的输入,并没有在类的任何其他成员使用,但我没有得到相同的错误.

非常感谢!

例子:

以下方法提供错误:

    private string CreateIntervalString(TimeSpan timeSpan)
    { 
          return timeSpan.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

以下不是:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 6

  1. 性能没有得到改善(以任何方式重要),但代码变得更加清晰.该方法不会让人觉得它使用实例,您可以在不创建类实例的情况下使用该方法.

  2. 由于您没有使用该方法中的实例,因此不会影响线程安全的状态.由于该方法仅使用发送给它的数据,因此它是线程安全的.

  3. 要么你实际上在方法中使用了一些实例成员,代码中有一些东西可能会使用某个实例成员,或者代码中有一些东西让工具认为它有.

  • 如果性能没有提高,为什么这个错误显示为Microsoft.Performence错误?,我的函数是privete,我只在我的内部类中使用它,所以任何我不应该创建一个实例才能使用它... ? (2认同)

Cli*_*ick 6

MSDN网站http://msdn.microsoft.com/en-us/library/ms245046.aspx给出了性能方面的答案

如果该方法未标记为static,则运行时将检查当前对象(this)是否为null.在大多数情况下,几乎没有可观察到的差异,这是真的,但是如果一种被称为每秒数百万次的方法可以通过静态获得这种收益那么它就值得.