代码走查工具篇FxCop的规则总结与翻译_Part3

   续接上篇:代码走查工具篇FxCop的规则总结与翻译_Part2

Performancerules(性能规则)

1、AvoidExcessiveLocals   CA1809

     避免过多的局部变量,优化性能的常见方法是将值存储于处理器寄存器,而不是内存中,这称为注册值。公共语言运行时最多可考虑注册 64 个局部变量。未注册的变量放在堆栈中,必须移到寄存器内方能进行操作。若要提供所有的局部变量都能注册的机会,应将局部变量的数目限制在 64 个以内。 

2、AvoidUncalledPrivateCode  CA1811

避免使用未调用的私有代码。

3、AvoidUninstantiatedInternalClasses   CA1812

避免未实例化的内部类

4、AvoidUnsealedAttributes    CA1813

避免使用未密封的特性

5、DoNotCastUnnecessarily   CA1800

避免进行不必要的强制转换,重复强制转换会降低性能,特别是在精简的迭代语句中执行强制转换时。对于显式重复强制转换操作,将强制转换的结果存储在局部变量中,并使用局部变量来替代重复强制转换操作。 

6、InitializeReferenceTypeStaticFieldsInline  CA1810

以内联方式初始化引用类型的静态字段,当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型的每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。访问任何静态成员或创建了类型实例时,都会触发静态初始化。示例用法:

public class NoStaticConstructor   {      static int someInteger = 3;      static string resourceString = InitializeResourceString();      static string InitializeResourceString()      {         ResourceManager stringManager =             new ResourceManager("strings", Assembly.GetExecutingAssembly());         return stringManager.GetString("string");      }   }

7、MarkAssembliesWithNeutralResourcesLanguage  CA1824 

用 NeutralResourcesLanguageAttribute 标记程序集

8、MarkMembersAsStatic CA1822

将成员标记为 static可以将不访问实例数据或不调用实例方法的成员标记为 static(在 Visual Basic 中为 Shared)。在将这些方法标记为 static 之后,编译器将向这些成员发出非虚拟调用站点。发出非虚拟调用站点将禁止在运行时对每个调用进行检查,从而确保当前的对象指针为非空。这会使性能敏感的代码的性能得到显著提高。在某些情况下,如果无法访问当前的对象实例,则表示存在正确性问题。

9、OverrideEqualsAndOperatorEqualsOnValueTypes  CA1815

重写值类型上的 Equals 和相等运算符。对于值类型,Equals 的继承的实现使用反射库,并比较所有字段的内容。反射需要消耗大量计算资源,可能没有必要比较每一个字段是否相等。如果希望用户对实例进行比较或排序,或者希望用户将其作为哈希表键,则值类型必须实现 Equals。如果编程语言支持运算符重载,则还应提供等号和不等号运算符的实现。

10、PreferJaggedArraysOverMultidimensional  CA1814

与多维数组相比,首选使用交错的数组,交错数组是元素为数组的数组。构成元素的数组可以是不同的大小,以减少某些数据集的浪费空间。

11、 PropertiesShouldNotReturnArrays  CA1819 

属性不应返回数组,即使属性是只读的,该属性返回的数组也不是写保护的。若要使数组不会被更改,属性必须返回数组的副本

12、 RemoveEmptyFinalizers   CA1821

 应尽可能避免析构函数,因为跟踪对象生存期会产生额外的性能系统开销。垃圾收集器将在收集该对象之前运行析构函数。这意味着收集该对象需要两个集合。空的终结器只会徒增这种系统开销,而没有一点好处。如果进行调试时需要一个终结器,请将整个终结器括在 #if DEBUG / #endif 指令中。

13、RemoveUnusedLocals   CA1804

移除未使用的局部变量

14、TestForEmptyStringsUsingStringLength   CA1820

   使用字符串长度测试是否有空字符串使用 String.Length 属性或 String.IsNullOrEmpty 方法比较字符串要比使用 Equals 的速度快得多。这是因为与 IsNullOrEmpty 或者为检索 Length 属性值并将其与零比较所需执行的指令数相比,Equals 执行更多的 MSIL 指令。

15、UseLiteralsWhereAppropriate   CA1802

在合适的位置使用文本在调用声明类型的静态构造函数时,会在运行时计算 staticreadonly 字段的值。如果在声明 staticreadonly 字段时未对其进行初始化,而且未显式声明静态构造函数,则编译器会发出一个静态构造函数来初始化该字段。const 字段的值在编译时计算并将存储在元数据库中,与 staticreadonly 字段相比,这有助于提高运行时性能。因为赋给目标字段的值可在编译时计算,所以,请将声明更改为 const 字段,以便该值在编译时(而非运行时)计算。

Portabilityrules(可移植性规则)

1、PInvokeDeclarationsShouldBePortable   CA1901

P/Invoke 声明应为可移植声明,可通过使用 IntPtr 或 UIntPtr(而非 Int32 或 UInt32)表示句柄来修复此冲突。

2UseOnlyApiFromTargetedFramework   CA1903 

 仅使用目标框架中的 API

3、ValueTypeFieldsShouldBePortable  CA1900 

值类型字段应为可移植字段,当用显式布局声明的结构封送到 64 位操作系统上的非托管代码时,是否正确对齐。IA-64 不允许访问未对齐的内存,如果此冲突未得到修复,进程将崩溃。

Securityrule(安全性规则)

1、AptcaMethodsShouldOnlyCallAptcaMethods  CA2116

APTCA 方法应只调用 APTCA 方法

2、AptcaTypesShouldOnlyExtendAptcaBaseTypes CA2117

APTCA 类型应只扩展 APTCA 基类型

3、ArrayFieldsShouldNotBeReadOnly  CA2105

数组字段不应为只读,设置了也不启作用。

4、CallGCKeepAliveWhenUsingNativeResources CA2115

处理 Exception 的 catch 块会捕获所有符合公共语言规范 (CLS) 的异常。但是,它不捕获不符合 CLS 的异常。

 try{ThrowsExceptions.ThrowNonClsException();}         

catch(Exception e) {// Remove some permission.

Console.WriteLine("CLS compliant exception caught"); }        

 catch{// Remove the same permission as above.            Console.WriteLine("Non-CLS compliant exception caught."); }

5、DoNotDeclareReadOnlyMutableReferenceTypes  CA2104

不要声明只读可变引用类型,举例:static protected readonly StringBuilder SomeStringBuilder;

6、DoNotIndirectlyExposeMethodsWithLinkDemands  CA2122 

     不要使用链接请求间接公开方法,

7、MethodSecurityShouldBeASupersetOfType CA2114 

方法安全性应是类型安全性的超集,

8、安全性规则后续规则虑过,因为个人愚见,自己团队暂时用不到。

 Securitytransparencyrules(安全透明性规则) 

1、DefaultConstructorsMustHaveConsistentTransparencyFxCopRule  CA2132

默认构造函数必须至少与基类型默认构造函数具有同样的关键性,具有 SecurityCriticalAttribute 的类型和成员无法供 Silverlight 应用程序代码使用。安全关键类型和成员只能供 .NET Framework for Silverlight 类库中的受信任代码使用。

2、DelegatesMustBindWithConsistentTransparencyFxCopRule  CA2133

 委托类型及其绑定的方法必须有一致的透明度。透明和安全关键委托可能仅绑定到其他透明或关键安全方法。相似地,关键委托可能仅将绑定到关键的方法。这些绑定规则确保通过委托调用方法的唯一代码也已直接调用相同方法。例如,绑定规则阻止透明代码直接通过透明委托调用关键代码。

3、省略若干项安全透明性规则,因为个人愚见,自己团队暂时用不到。

Usagerules(引用规则)

1、暂不翻译次分类下的规则,下一篇总结能在自己实际工作中用到的项目。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值