1

我有一个方法,每 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);
    }
}

问题是我是否需要检查文件流是否为空或者它是否每次都可以写入if (_fStream != null && _fStream.CanWrite),我有一个try/catch已经 in 的SaveData方法?该检查有哪些性能问题?

4

2 回答 2

1

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

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

如果您比较检查的性能和引发异常的成本,那么执行检查肯定会更好。

但是,如果 _fstream 为空或 _fstream 无法写入非常罕见,则可以补偿 try catch 的性能。但这仍然不是编程的好方法。

于 2013-08-28T09:24:44.417 回答
0

您应该重构您的代码,以便在未成功创建流且未分配 _fStream 的情况下使用 type == 2 调用 SaveData 因此,您不必担心 _fStream 为空。您仍然需要尝试...抓住 SaveDataToFile,因为文件写入可能由于各种原因(磁盘空间不足、文件上的其他锁定等)而失败。

于 2013-08-28T09:39:43.767 回答