C# 中的 7 个简单(优化)技巧
提到 C#,你首先想到的是什么?如果你和大多数人一样,以下这些词组可能会浮现在你的脑海中:面向对象、可移植代码和 .NET Framework。
但如果您打算在对性能要求极高的应用程序中使用 C#,那么您应该也考虑以下几个方面:性能、速度和内存使用。ByteHide特此整理了一些相关的基本技巧。
如果您正在开发一款以性能为主要考量的应用程序,那么这 10 个技巧将帮助您提高 C# 应用程序的性能,以达到甚至超越您的预期!
1. 避开垃圾收集员
C# 编程语言构建于 .NET Framework 之上,而 .NET Framework 又建立在垃圾回收机制之上。这有助于保持较高的性能,但您仍然可以通过避免使用在释放时需要垃圾回收的变量(例如对象)来进一步提升性能。避免垃圾回收有助于维持高性能并优化内存使用。
2. 使用栈分配器(C# 回收分配器)
如果你的应用程序需要进行大量的内存分配,那么避免自行释放和分配内存所带来的开销,或许可以提升性能。你可以通过在堆内存中上下移动,直到找到一个未使用的内存块,然后将其标记为可重用。基于栈的内存分配器正是如此。它从称为栈的区域分配内存,当找到已释放的内存块时,新的内存块会被放置在栈顶。
3. 不要重复使用对象引用
这是C# 初学者常犯的一个错误:当不再需要某个对象时,他们不是清理对象并释放其内存,而是继续使用它,直到没有可用内存为止。
这在服务器应用程序中尤其危险,因为许多程序共享一台服务器;一个程序泄露的对象引用可能会导致使用该服务器的所有其他程序崩溃。为了避免创建泄露的引用,请在使用完对象后将其显式设置为 null, 或者确保只创建必要的引用。
4. 避免使用内存映射(对于大型文件/文件系统)
使用 C# 的 `get`File.ReadAllText()或 ` File.ReadAllLines()get` 方法时,一个常见的陷阱是它们会立即将所有内容加载到内存中。如果处理的是非常大的文件和/或速度较慢的存储子系统(例如硬盘),这可能会导致性能瓶颈。一种解决方法是使用内存映射文件,它会在内存中创建一个虚拟空间,该空间看起来就像磁盘上的文件一样。
5. 避免不必要的序列化/反序列化
.NET Framework 提供了开箱即用的对象序列化和反序列化功能。C #、F# 和 Visual Basic .NET 等几种核心 .NET 语言也同样如此。然而,在某些情况下,这些功能可能会导致应用程序出现严重的性能问题。当需要序列化或反序列化大量数据时,这种情况尤为突出。
如果您经常使用这些功能,那么了解它们的工作原理非常重要,这样您才能选择合适的策略来处理您的数据。
6. 即时删除未使用的方法
即时( JIT ) 编译器是一个读取 CIL 代码并将其转换为本地代码的过程。构建应用程序时,您不希望 JIT 编译所有类——尤其是一些仅在启动时使用一次或几次的类。通过仅在需要时编译所需内容,您可以显著加快应用程序的启动速度!
有几种方法可以确保你的启动速度更快,其中一种方法是使用反射:使用反射从这些对象中移除未使用的方法。System.Reflection.Emit
7. 在生产模式下进行测量,而不是在调试模式下进行测量
在许多编程语言中,应用程序会在特殊的调试模式下运行,开发者可以在这种模式下执行诸如设置断点和打印调试信息之类的操作。这对于开发者在开发过程中测试代码来说是一种绝佳的方式——而且在开发过程中至关重要。但是,编码完成后,在应用程序正式上线之前,您应该切换回生产模式。
在生产模式下运行应用程序可以消除那些仅在开发过程中必不可少的额外代码行。
文章来源:https://dev.to/bytehide/7-simple-optimization-tips-in-c-nhn