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);
    }
}

問題は、ファイル ストリームが null かどうか、または毎回書き込み可能かどうかを確認する必要があるかどうif (_fStream != null && _fStream.CanWrite)try/catchですSaveData。そのチェックのパフォーマンスの問題は何ですか?

4

2 に答える 2

1

(_fStream != null && _fStream.CanWrite) の場合、SaveData メソッドに既に try/catch がありますか? そのチェックのパフォーマンスの問題は何ですか?

経験則として、常にプログラムの通常の流れを処理するようにしてください。例外処理は、例外的な状況でのみ実行する必要があります。また、例外のスローはコストのかかる操作であることに注意してください。

チェックのパフォーマンスと例外をスローするコストを比較すると、チェックを実装する方が確実に優れています。

ただし、_fstream が null であるか、_fstream が書き込めないことが非常にまれな場合は、try catch のパフォーマンスを補うことができます。しかし、それはプログラミングの良い方法ではありません。

于 2013-08-28T09:24:44.417 に答える
0

ストリームが正常に作成されず、_fStream が割り当てられていない場合、type == 2 で SaveData を呼び出すことができないように、コードをリファクタリングする必要があります。したがって、_fStream が null であることを心配する必要はありません。ファイルの書き込みはあらゆる種類の理由 (ディスク容量不足、ファイルの他のロックなど) で失敗する可能性があるため、SaveDataToFile については try...catch が必要です。

于 2013-08-28T09:39:43.767 に答える