c# 避免内存泄漏的 弱引用 用法

embedded/2024/9/23 8:15:05/

在.NET中,当你使用弱引用(WeakReference 或 WeakReference<T>)时,你不能直接像使用普通引用那样调用它所引用的对象的方法或属性。因为弱引用只是提供了一种方式来访问可能已经被垃圾收集器回收的对象,而并不保证对象仍然存在。

要通过弱引用调用对象的方法或属性,你需要首先检查弱引用的Target属性是否非空(即对象是否仍然存在)。如果Target非空,那么你可以安全地将它转换为适当的类型,并调用其方法或属性。

以下是一个使用WeakReference<T>调用对象方法的示例:

public class MyResource  
{  public void DoSomething()  {  Console.WriteLine("Doing something...");  }  
}  public class WeakReferenceExample  
{  private WeakReference<MyResource> _weakResource;  public WeakReferenceExample()  {  // 创建一个MyResource实例并使用WeakReference引用它  MyResource resource = new MyResource();  _weakResource = new WeakReference<MyResource>(resource);  // ... 在这里进行一些操作,可能会触发垃圾收集 ...  // 尝试通过WeakReference调用MyResource的方法  if (_weakResource.TryGetTarget(out MyResource resourceFromWeakRef))  {  // 如果resourceFromWeakRef不为null,说明对象仍然存在  resourceFromWeakRef.DoSomething(); // 调用方法  }  else  {  // 如果resourceFromWeakRef为null,说明对象已被回收  Console.WriteLine("Resource has been collected.");  }  }  
}  // 在某处创建WeakReferenceExample的实例  
new WeakReferenceExample();  // 注意:由于GC的行为是不可预测的,因此上面的示例可能不会立即显示资源被回收的消息。  
// 为了测试,你可能需要显式调用GC.Collect(),但这通常不推荐在生产代码中使用。


http://www.ppmy.cn/embedded/100255.html

相关文章

【C++】实现一个定长内存池(Object Pool)

目录 为什么要有定长内存池&#xff1f; 什么是定长内存池&#xff1f; 如何实现定长内存池&#xff1f; 为什么要有定长内存池&#xff1f; C中&#xff0c;申请释放空间一般使用new和delete。为了解决自定义类型初始化和清理的问题&#xff0c;new的底层封装了operator n…

Stable Diffusion的微调方法原理总结

目录 1、Textural Inversion&#xff08;简易&#xff09; 2、DreamBooth&#xff08;完整&#xff09; 3、LoRA&#xff08;灵巧&#xff09; 4、ControlNet&#xff08;彻底&#xff09; 5、其他 1、Textural Inversion&#xff08;简易&#xff09; 不改变网络结构&…

【Linux篇】Linux命令基础

目录 1. Linux的目录结构 1.1 Linux的目录结构 1.2 /在Linux系统中的表示 2. linux命令基础 2.1 什么是命令和命令行 2.2 Linux命令的通用格式 2.3 ls命令 2.3.1 ls命令的参数的作用&#xff1a; 2.3.2 ls命令的选项 2.3.3 命令的选项组合使用 2.4 cd切换工作目录 2…

-Wl,-rpath= 编译器链接器指定动态库路径 与 LD_LIBRARY_PATH

实例先行&#xff0c; 1&#xff0c;情景 三互相依赖的小项目&#xff1a; &#xff08;1&#xff09;libbottom.so&#xff0c;无特别依赖&#xff0c;除系统文件 &#xff08;2&#xff09;libtop.so&#xff0c;依赖libbottom.so &#xff08;3&#xff09;app 可执行程…

韩国云主机玩游戏性能怎么样

韩国云主机玩游戏性能怎么样&#xff1f;韩国云主机作为高性能的计算服务&#xff0c;为全球游戏玩家提供了一种新的游戏体验方式。用户所关注的韩国云主机在游戏性能方面的表现&#xff0c;可以从多个维度进行详细评估。下面将具体分析韩国云主机用于玩游戏的性能特点&#xf…

Selenium自动化测试 常见API的使用

本篇文章内容是关于 Selenium 自动化测试工具的常见 API 的使用 Selenium版本&#xff1a;4.23.1 编程语言&#xff1a;Java JDK22 编译器&#xff1a;IDEA 2024.2.0.2 浏览器版本&#xff1a;谷歌浏览器128.0.6613.36&#xff08;正式版本&#xff09; &#xff08;64 位&…

吴恩达机器学习课后作业-05偏差与方差

偏差与方差 题目欠拟合改进欠拟合影响偏差和方差因素训练集拟合情况训练集和测试集代价函数选择最优lamda 整体代码 训练集:训练模型 验证集︰模型选择&#xff0c;模型的最终优化 测试集:利用训练好的模型测试其泛化能力 #训练集 x_train,y_train data[X],data[ y]#验证集 …

javascript如何创建函数

javascript创建函数的语法格式是 function 函数名(形参1&#xff0c;形参2&#xff0c;形参n) { 函数执行语句 } 实例代码如下 <body> <script> function sum(a,b) {var cabreturn c } var reault reaultsum(1,2) document.write(reault) </script> &l…