c# - 没有引用它的变量时的对象处置
问题描述
我有这个代码:
Method1(Method2());
但是,Method2 返回一个需要释放的对象。这是我可以处理的方法:
using (var x = Method2())
{
await Method1(x);
}
Method1 和 Method2 属于框架,我无法更改它们。
我有很多这样的案例。例如,Method2 创建 HTTP 请求,Methid1 发送它。
同样,这两种方法都属于我无法更改的库。
我知道如果我不处理对象,垃圾收集器最终会这样做。可能不会很快。我在徘徊,如果可能在没有任何变量引用该对象的情况下(因为它将在 Method1 返回之后),我可以指望垃圾收集器立即处理该对象,因此可以使用原始短选项。
解决方案
使用using
语句,就像你展示的那样,是的,这是优雅的方式
using (var something = Method2())
{
Method1(something);
}
或者如果你愿意
using (var something = Method2())
Method1(something);
其他任何事情都是不寻常和令人困惑的(即在您的方法1中处理它)......正如评论所指出的,除非这是某种命令/查询服务,或者其他可以注入一次性范围的依赖项
此外,最近打电话wait
给任何事情都是可疑的
推荐阅读
- sql - 使用 sysdate 创建默认列,但在插入数据时出现字符变化错误
- iis - URL Rewrite all folders at root of subdomain to folder in a different file path
- performance - PrimeNG Turbo Table 在 IE 11 中的性能缓慢
- jquery - How to hide headers of a AJAX Post request?
- javascript - 通过从表的输入字段中获取值来解析和访问 JSON 中的数据:JavaScript
- r - 绘制带有渐变的单词和点,除了另一列中指定的一些黑色(R ggplot2)
- r - 使用R根据值的变化从数据框中提取多行
- java - Java - 有没有办法生成随机但确定性的信号?
- html - 如何使用 html 和 css 在同一行设置两张图片?
- r - 根据存在缺席值将R数据框列插入数据框