C# 变量在声明类型的地方实例化(例如string s;
)并在当前范围的右大括号处释放:
// Operates with Q memory
void FantasyMethod() {
var o = new BigObject();
{
var temp = new BigObject();
Populate(temp); // Populates o1 with N megabytes of data
o = PerformSomeOperationsOn(temp); // Returns a BigObject of size M (M is close to N)
// Currently, M+N memory is occupied, we have Q-M-N free
}
// Let's tell the garbage collector to catch up
GC.Collect();
GC.WaitForPendingFinalizers();
// Currently, M memory is occupied
DoUsefulStuffWith(o); // This method can only work if at least Q-M-N/2 memory is free
}
这样做的一个好处是我可以在函数返回之前释放大变量。在上面的(微不足道的)块中,我通过在不再需要一个大变量时立即处理我有限的可用内存。
- 以上是正确的吗?
- 这样做是个好主意吗(我对赞成和反对的论点感兴趣,而不是个人意见或偏好)?提取裸括号块作为一种方法会降低内存使用效率吗?如果出于可读性原因我不想制作新方法怎么办?