2017-09-12 10 views
0

ファイルはスレッドによって書き込み用に開かれます。ファイルへの参照はメソッド内のローカル変数であるため、disposeまたはfinalizerでクリーンアップすることはできません。サイトがシャットダウンされたときにファイルロックが開かないようにする

コードでは、usingステートメントを使用して、ファイルが閉じられ、通常の操作中にすべてのロックが解除されることを確認します。ただし、サイトのインスタンスをシャットダウンすると、usingステートメントはFileStreamをクリーンアップする機会を得られない可能性があります。ただし、IISプロセスは開いたままになることがあるため、サーバーが再起動されない限りロックは解除されません。

サイトが停止または再起動したときにファイルロックがハングしないようにするには、どのような方法が最適ですか?

または、IISがサイトをシャットダウンすると、この問題が緩和されますか?

+0

頻度はどのくらいですか?私は、あなたは定期的な問題を解決しているのか、それともそれを仮に防止しようとしているのでしょうか? – fharreau

+0

仮にそれを防ぐ。しかし、私はこれが以前実際に私に起こったと信じています。 – TheCatWhisperer

+1

スレッドのfinallyブロックを実行してファイルハンドルを閉じることを許可しないで、スレッドはどのようにシャットダウンしましたか?スレッドがシャットダウンされた場合、そのローカル変数はもはや根ではなくなります。ファイナライザはなぜ動作しませんか?私はあなたのシナリオがどのように可能か理解していません。 –

答えて

0

可能な限りリソースのロックを最小限に抑えることは良い原則です。これを行わないと、1つの結果が表示されます。実際にファイルに書き込む必要があるときにファイルを開いてロックすることをお勧めします。ロックを解除してすぐにファイルを閉じます。ファイルを繰り返し開いて(最後に追加する)パフォーマンスオーバーヘッドが気になる場合は、コードをプロファイルして、パフォーマンスが許容できるかどうかを確認する必要があります。

+0

問題のコードは、すでにファイルストリームが開いている時間を最小限に抑えています。しかし、このクラスはストレージユーティリティであるため、必然的に多くのオープンな 'FileStream'が必要になります – TheCatWhisperer

関連する問題