我将在c#中给出一个例子。
以下两个列表实现了同样的目的。情况2的情况肯定比情况1更好,因为try部分隔离了抛出异常的行。
我很想知道性能是否不同,如果是的话,它如何扩展到try部分中包含的代码数量?
最后,为什么会这样?
案例1:
try
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
data = (PlayerData)bf.Deserialize(file);
file.Close();
} catch (System.Runtime.Serialization.SerializationException e)
{
...
}
案例2:
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
try
{
data = (PlayerData)bf.Deserialize(file);
} catch (System.Runtime.Serialization.SerializationException e)
{
}
file.Close();
答案 0 :(得分:1)
答案 1 :(得分:0)
try块中的代码量对性能没有影响。事实上,try块的存在将产生最小的影响。 .NET中的异常费用在它们被抛出时出现,并且运行时必须执行堆栈展开。
从您关注的电话中仅捕获您需要处理的一组例外。
在你的情况2中,你正在消除这种异常。那是你想要的吗?如果您只想确保文件已关闭,请使用不带catch语句的try / finally。
请参阅:
答案 2 :(得分:-1)
如果没有例外,尝试的性能成本非常小。 但在案例2中,你总是关闭文件,我认为这是更好的解决方案。如果发生的情况是1,一些异常文件也将被关闭,但后者当垃圾收集器释放你的FileStream对象时。