以下C#代码的性能问题

时间:2013-08-28 09:19:27

标签: c# performance filestream

我有一个方法,每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方法,我可以写或不写吗?该检查有哪些性能问题?

2 个答案:

答案 0 :(得分:1)

  

如果(_fStream!= null&& _fStream.CanWrite),我在SaveData方法中已经有一个try / catch?该检查有哪些性能问题?

根据经验,您应该始终尝试处理程序的正常流程。只有在特殊情况下才能进行异常处理。你应该注意,异常抛出是一项代价高昂的操作。

如果比较检查的性能和抛出异常的成本,那么最好实施检查。

虽然,如果很少有_fstream为null或者_fstream不能写,那么try catch的性能可以得到补偿。 但它仍然不是一个好的编程方式。

答案 1 :(得分:0)

如果尚未成功创建流并且已分配_fStream,则应重构代码,以便不可能调用类型== 2的SaveData。因此,您不必担心_fStream为null。你仍然需要尝试...捕捉SaveDataToFile,因为文件写入可能由于各种原因(磁盘空间不足,文件上的其他锁等)而失败。