在我的C#app中,我在一些非常大的数组的初始化期间抛出自定义定义的异常。如何在抛出没有catch的Exceptions时抛出应用程序使用的所有内存,所以没有finally块,只是throw语句?或者在此上下文中抛出后可以执行finally块吗?
由于
答案 0 :(得分:1)
如果您有本地阵列声明,那么您不需要关心它,因为GC将为您收集它。因此,如果您的代码看起来像这样:
int[] values = new int[100000];
// Some initialization here
throw new ApplicationException();
// Some initialization here
那么你不需要关心它。如果您的数组变量在处理异常时超出范围,或者之后它也将是GC,则同样适用于这种情况。如果你将它作为一个字段变量,可能会出现唯一的问题,因为它不会被GC本身(意味着将从其他地方引用它)或静态字段或类似物。如果你想确保清除它,你可以这样做:
try
{
m_Values = new int[100000];
// Some initialization here
throw new ApplicationException();
// Some initialization here
}
catch // use this part if array should be used if there is no exception
{
m_Values = null;
throw;
}
finally // use this part if you never need an array afterwards
{
m_Values = null;
}
因此,如果你使用这种模式,你可以确定没有对你的数组的引用,它将在某些时候被垃圾收集。您也可以强制GC收集它,但不建议这样做。
答案 1 :(得分:1)
您可以使用不带catch的try / finally语句。在这种情况下,无论是否抛出异常,都将执行finally块。
try{
...
throw new Exception();
...
}
finally{
//cleanup code
...
}