我有一个方法,每100毫秒调用一次,以保存一些数据到文件。 此方法的输入是字节数组,它是消息,消息具有类型。
private FileStream _fStream;
public void SaveData(byte[] data)
{
try
{
int type = GetTypeOfData(data);
switch (type)
{
case 0:
// do something
break;
case 2:
SaveDataToFile(data);
break;
case 1:
_fStream = File.Create(fileName);
break;
}
}
catch (Exception ex)
{
// log error
}
}
private void SaveDataToFile(byte[] data)
{
if (_fStream != null && _fStream.CanWrite)
{
_fStream.Write(data, 0, data.Length);
}
}
问题是我是否需要检查文件流是否为null或是否为
每次if (_fStream != null && _fStream.CanWrite)
,我都有try/catch
方法,我可以写或不写吗?该检查有哪些性能问题?
答案 0 :(得分:1)
如果(_fStream!= null&& _fStream.CanWrite),我在SaveData方法中已经有一个try / catch?该检查有哪些性能问题?
根据经验,您应该始终尝试处理程序的正常流程。只有在特殊情况下才能进行异常处理。你应该注意,异常抛出是一项代价高昂的操作。
如果比较检查的性能和抛出异常的成本,那么最好实施检查。
虽然,如果很少有_fstream为null或者_fstream不能写,那么try catch的性能可以得到补偿。 但它仍然不是一个好的编程方式。
答案 1 :(得分:0)
如果尚未成功创建流并且已分配_fStream,则应重构代码,以便不可能调用类型== 2的SaveData。因此,您不必担心_fStream为null。你仍然需要尝试...捕捉SaveDataToFile,因为文件写入可能由于各种原因(磁盘空间不足,文件上的其他锁等)而失败。