Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA1837:使用 Environment.ProcessId 而不是 Process.GetCurrentProcess().Id

CA1837:使用 Environment.ProcessId 而不是 Process.GetCurrentProcess().Id

作者头像
用户4268038
发布于 2022-02-19 10:56:28
发布于 2022-02-19 10:56:28
6200
举报
文章被收录于专栏:stcnbstcnb

规则 ID

CA1837

类别

“性能”

修复是中断修复还是非中断修复

非中断

原因

此规则会查找对 System.Diagnostics.Process.GetCurrentProcess().Id 的调用,并建议改用 System.Environment.ProcessId,因为这样更高效。

规则说明

System.Diagnostics.Process.GetCurrentProcess().Id 成本较高:

它分配 Process 实例,通常只为了获取 Id。

需要处置 Process 实例,这会影响性能。

很容易忘记调用 Process 实例上的 Dispose()。

如果除了 Id 之外没有其他内容使用 Process 实例,那么随着引用的类型图增加,链接大小也会不必要的增长。

发现或查找此 API 有点困难。

System.Environment.ProcessId 可避免上述所有情况。

备注

从 .NET 5.0 开始可以使用规则 CA1837。

如何解决冲突

可以手动解决冲突,或者在某些情况下,使用快速操作来修复 Visual Studio 中的代码。

以下两个代码片段显示了规则冲突及其解决方法:

using System.Diagnostics;

class MyClass

{

void MyMethod()

{

int pid = Process.GetCurrentProcess().Id;

}

}

Imports System.Diagnostics

Class MyClass

Private Sub MyMethod()

Dim pid As Integer = Process.GetCurrentProcess().Id

End Function

End Class

using System.Diagnostics;

class MyClass

{

void MyMethod()

{

int pid = System.Environment.ProcessId;

}

}

Imports System.Diagnostics

Class MyClass

Private Sub MyMethod()

Dim pid As Integer = System.Environment.ProcessId

End Function

End Class

提示

Visual Studio 中为此规则提供了代码修补程序。 若要使用它,请将光标置于冲突上,然后按 Ctrl+。 (句点)。 从显示的选项列表中选择“使用‘Environment.ProcessId’而不是‘Process.GetCurrentProcess().Id’”。

何时禁止显示警告

如果你不关心不必要的分配和最终处置 Process 实例造成的性能影响,可禁止显示此规则的冲突警告。

另请参阅

性能规则

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CA2305:请勿使用不安全的反序列化程序 LosFormatter
调用或引用了 System.Web.UI.LosFormatter 反序列化方法。
用户4268038
2022/02/20
3370
CA1846:首选 AsSpan 次选 Substring
对其中一个 String.Substring 重载的调用结果被传递给具有接受 ReadOnlySpan<Char> 的可用重载的方法。
呆呆
2022/02/26
1K0
CA1024:在适用处使用属性
在大多数情况下,属性表示数据,方法执行操作。 访问属性的方式类似于访问字段,这使得它们更易于使用。 如果一个方法具备以下条件之一,则该方法可能很适合成为属性:
用户4268038
2022/01/10
5520
CA1813:避免使用非密封特性
继承自 System.Attribute 的公共类型不是抽象类型,也不会密封(Visual Basic 中的 NotInheritable)。
呆呆
2022/02/19
4340
CA1841:首选字典包含方法
此规则可找到在 IDictionary<TKey,TValue> 的 Keys 或 Values 集合上对 Contains 方法的调用,这些调用可替换为在字典本身对 ContainsKey 或 ContainsValue 方法的调用。
呆呆
2022/02/26
4150
CA2329:不要使用不安全的配置反序列化 JsonSerializer
如果传递到反序列化方法或初始化为字段或属性的 Newtonsoft.Json.JsonSerializer 实例满足以下两个条件,则会触发此规则:
呆呆
2022/02/20
8550
CA2310:请勿使用不安全的反序列化程序 NetDataContractSerializer
调用或引用了 System.Runtime.Serialization.NetDataContractSerializer 反序列化方法。
用户4268038
2022/02/20
3810
CA1044:属性不应是只写的
Get 访问器提供对属性的读取访问权限,而 set 访问器提供写入访问权限。 虽然可以接受且经常需要使用只读属性,但设计准则禁止使用只写属性。 这是因为允许用户设置值但又禁止该用户查看这个值不能提供任何安全性。 而且,如果没有读访问,将无法查看共享对象的状态,使其用处受到限制。
呆呆
2022/01/10
2540
CA3007:查看公开重定向漏洞的代码
处理不受信任的输入时,请注意防范开放重定向漏洞。 攻击者可以利用开放重定向漏洞,使用你的网站提供合法 URL 的外观,但将毫不知情的访客重定向到钓鱼网页或其他恶意网页。
呆呆
2022/02/20
9980
CA3002:查看 XSS 漏洞的代码
在处理来自 Web 请求的不受信任的输入时,请注意防范跨站脚本 (XSS) 攻击。 XSS 攻击会将不受信任的输入注入原始 HTML 输出,使攻击者可以执行恶意脚本或恶意修改网页中的内容。 一个典型的技术是将包含恶意代码的 <script> 元素放入输入中。 有关详细信息,请参阅 OWASP 的 XSS。
呆呆
2022/02/20
7510
CA3004:查看信息泄露漏洞的代码
泄漏异常信息可让攻击者深入了解应用程序的内部机制,从而帮助攻击者找到其他漏洞并利用这些漏洞。
呆呆
2022/02/20
7190
CA2327:不要使用不安全的 JsonSerializerSettings
如果 Newtonsoft.Json.JsonSerializerSettings 实例的以下两个条件均为 true,则会触发此规则:
呆呆
2022/02/20
5860
CA3003:查看文件路径注入漏洞的代码
在处理来自 Web 请求的不受信任的输入时,请谨慎使用用户控制的输入指定文件路径。 攻击者可能能够读取非预期文件,从而导致敏感数据出现信息泄漏。 或者,攻击者可能能够写入非预期文件,从而导致在未经授权的情况下修改敏感数据,或者降低服务器的安全性。 常见的攻击者技术是使用路径遍历访问预期目录之外的文件。
呆呆
2022/02/20
1.3K0
switch与if效率实例解析·5年以下编程经验必看【C#】
绝大多数的程序员喜欢使用if判断,但是真的效率高吗?还是其它的,可能只会用if呢!我们今天就具体测一测,用事实说话,测试量100W: 本文采用的是【C#】语言进行测试 switch效率测试代码: using System; using System.Diagnostics; namespace Action { class Program { static void Main(string[] args) { Random ra =
红目香薰
2022/11/29
6620
switch与if效率实例解析·5年以下编程经验必看【C#】
CA1810:以内联方式初始化引用类型的静态字段
当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型的每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。 访问任何静态成员或创建该类型的实例时,将触发静态初始化。 但是,如果声明一个类型的变量,但不使用它,则不会触发静态初始化;这在初始化会更改全局状态的情况下非常重要。
呆呆
2022/02/19
7480
CA1835:在基于流的类中,首选 ReadAsync/WriteAsync 方法的基于内存的重载
此规则查找 ReadAsync 和 WriteAsync 的基于字节数组的方法重载的等待调用,并建议改为使用基于内存的方法重载,因为它们的效率更高。
用户4268038
2022/02/19
1.4K0
for循环与while循环效率对比·5年以下编程经验必看C#】
for效率测试代码: using System; using System.Diagnostics; namespace Action { class Program { static void Main(string[] args) { GC.Collect();//清理一下先 Random ra = new Random(); int count = 1000000;//100W
红目香薰
2022/11/29
7870
for循环与while循环效率对比·5年以下编程经验必看C#】
CA2311:在未先设置 NetDataContractSerializer.Binder 的情况下,请不要反序列化
在未设置 Binder 属性的情况下调用或引用了 System.Runtime.Serialization.NetDataContractSerializer 反序列化方法。
用户4268038
2022/02/20
1.5K0
CA2321:请勿使用 SimpleTypeResolver 对 JavaScriptSerializer 进行反序列化
使用 System.Web.Script.Serialization.SimpleTypeResolver 初始化后,调用或引用了 System.Web.Script.Serialization.JavaScriptSerializer 反序列化方法。
用户4268038
2022/02/20
1.4K0
WPF程序开发-保证程序启动唯一
前言 要保证程序唯一,有两种方式 新程序启动时发现已启动就自动退出 新程序启动发现已启动关闭之前的程序 关闭新进程 根据进程 protected override void OnStartup(StartupEventArgs e) { checkProcess(); } private void checkProcess() { Console.WriteLine("程序启动"); //获取欲启动进程名 string ProcessName = Process.GetCu
码客说
2021/11/29
8260
推荐阅读
相关推荐
CA2305:请勿使用不安全的反序列化程序 LosFormatter
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档