D.R*_*.R. 5 .net c# properties
我正在使用API,不幸的是,调用get属性访问器会产生副作用.我怎样才能确保:
public void Foo()
{
var x = obj.TheProp; // is it guarnateed to be accessed?
}
Run Code Online (Sandbox Code Playgroud)
是不是被编译器优化了?
这将不会被优化 - getter是一个方法并且将被调用,尽管JIT可能选择"内联"它的很多,如果它很简单,也许最终(并且完全在理论上)最终只有一个null引用检查是否TheProp做了什么特别令人兴奋的事情.什么可以发生的是"事返回"(即代码存储到x)符合垃圾收集的方法结束之前; 这很少是一个问题,除了像进程外互斥的东西; 在这种情况下,您可以执行以下操作:
var x = obj.TheProp;
// long-running code here
GC.KeepAlive(x);
Run Code Online (Sandbox Code Playgroud)
但请注意,如果x是值类型,则会强制将其装箱,这并不理想.
但重点是:上述内容并非旨在确保TheProp实际调用; 它适用于一组特定的垃圾相关场景.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |