c# - 解决C#内存泄漏的方法有哪些

标签 c# .net memory-leaks garbage-collection

我正在学习 C#。据我所知,您必须正确设置才能让垃圾收集器真正删除应有的所有内容。我正在寻找多年来从你那里学到的智慧,聪明人。

我有 C++ 背景,非常习惯代码味道和开发模式。我想了解 C# 中的代码味道是什么样的。给我建议!

删除内容的最佳方法是什么?

你怎么知道什么时候有“内存泄漏”?


编辑:我正在尝试开发一个“内存管理要始终做的事情”的 list


非常感谢。

最佳答案

C#,.NET Framework 使用托管内存,所有内容(但分配的​​非托管资源)都被垃圾收集。

可以安全地假设托管类型总是被垃圾收集。这包括数组结构。随意执行 int[] stuff = new int[32]; 并忘记它。

如果您在类中打开文件、数据库连接或任何其他非托管资源,请实现 IDisposable 接口(interface)并在您的 Dispose 方法中取消分配非托管资源。

任何实现 IDisposable 的类都应该显式关闭,或者在(我认为很酷的)Using block 中使用;

using (StreamReader reader = new StreamReader("myfile.txt"))
{
   ... your code here
}

此处 .NET 将在超出 {} 范围时处理 reader。

关于c# - 解决C#内存泄漏的方法有哪些,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/690071/

相关文章:

c# - 在 C# 中调用 System.Delegate 类对象

c# - .Net 编程语言中的可空类型

c# - .net 定义采用 lambda 表达式的函数

.net - 将 .NET ushort[] 数组作为 uint16_t* 访问,无需复制

c# - 在 C# 中的位置拆分字符串

c - Valgrind 入门(无效写入)

c# - 如何在 HTTP 触发器 Azure Function 3.x 中获取操作 IS。附图片

c# - Xamarin Forms 项目中以 *CS.cs 结尾的文件的用途是什么?

在子进程中使用 std::string 时发生 C++ 内存泄漏

swift - 调用实例的描述方法时快速内存泄漏