12

Webサービス内で、ローカルディスク上のファイルへのファイルストリームを開きます。私はこれをサービスの存続期間中維持します。入ってくるクエリごとに、ファイルストリームを使用してディスクを読み取ります。これは、クエリごとにファイルストリームを再度開く必要がないようにするためです。このパスの遅延は重要です(数ミリ秒未満である必要があります)。SSDを使用してディスクIO時間を0.1ms以下に保ちます。

ファイルストリームが長期間(数日)にわたって「悪くなる」(無効になる)可能性があります。すべてのクエリでファイルストリームを再度開く方が安全ですか?再度開く必要がある場合、ファイルストリームを1秒間に数回繰り返し開くオーバーヘッドはどれくらいですか?

4

2 に答える 2

7

必要な限りファイルを開いたままにしておくのが安全です。

それはあなたの場合に良いかどうか-あなたは自分で決める必要があります。ファイルを再度開くのに時間がかかることはありませんが(通常のドライブでも)、自分自身を誰もいないものとして測定する必要がありますが、正確なパフォーマンス目標はわかっています。

于 2012-11-07T19:14:59.290 に答える
6

ファイルを開いたままにしておくことの唯一の懸念は、何らかの理由でアプリケーションが失敗し、現在の場所から回復してストリームを閉じることができなかった場合です。ファイルを開くために使用されるCreateFileエントリポイントKERNEL32は、次のステートメントを作成します。

CreateFileによって返されたオブジェクトハンドルを使用してアプリケーションが終了したら、CloseHandle関数を使用してハンドルを閉じます。これにより、システムリソースが解放されるだけでなく、ファイルやデバイスの共有やデータのディスクへのコミットなどに幅広い影響を与える可能性があります。詳細は、必要に応じてこのトピック内に記載されています。

FileStreamですから、毎回開閉する方がはるかに適切だと思います。

于 2012-11-07T19:21:14.637 に答える