2010-12-30 10 views
1

パラメータ保存のためにファイルをより効率的に使用するために、いくつかのレガシーコードを更新しています。基本的には、一度読み込まれるとすべての設定が内部的にキャッシュされるため、ファイルを開かずに再び読み込むことができます。キャッシュを使用する前に、キャッシュの作成時間をファイルの最終変更時間と比較し、更新されたファイルでキャッシュを再作成します。これは、ユーザーがファイルの名前を変更した場合を除いて、正常に機能します。これは、そのアクションが最後に変更された時刻を更新しないためです。ファイルの名前が変更されたかどうかを確認するにはどうすればよいですか?

私はapp.iniを削除し、app.iniにコピーの名前を変更し、その後、私のプログラムのapp - copy.ini外を変更、app - copy.iniに私のapp.iniをコピーするのであれば、私のプログラムは現在、時代遅れのキャッシュを使用しています。私のプログラムがapp.iniの削除をキャッチしてキャッシュをクリアしたとしても、コピーの名前が変更されたときにキャッシュを再構築しません。プログラムは非常に長い時間無人で実行されるように設計されていますので、ファイルを継続的に監視することは避けてください。パラメータを読み込む必要がある場合にのみチェックしてください。

+0

おそらくあなたは、これは本当にユーザーが検討するパフォーマンスの向上を達成することをチェックしたようなものを使用することができます価値ある? – MarkJ

+0

@ MarkJ - いいえ、まだありません。私はちょうどキャッシングコードを書いて、まもなくパフォーマンスの向上をテストします。これは主にVB6で再習得するための練習でしたが、パフォーマンスが向上したら、素晴らしいものになりました。しかし、私の主な質問はファイル名の変更を検出することでした。特定のアプリケーションは単なる例です。ファイルウォッチャーはおそらく問題を解決しますが、本当にその質問に答えません。 – dlras2

+2

"NTFSは、最後にアクセスしてから1時間後までにファイルの最終アクセス時刻を更新します。"これは、これらのタイムスタンプがファイルシステムのオーバーヘッドを削減するために低揮発性属性であるためです。 INIファイルは、それ自体が高度に揮発性であることを意味するものではなく、手作業による編集を外部的に実現可能にする。プロセスを厳重に制御する必要がある場合は、ユーザーが直接変更しないファイルに設定UIを提供する必要があります。次に、必要に応じて、制御された方法で、データ内に独自の高揮発性タイムスタンプを使用することができます。パフォーマンスのためにシステムレベルのファイルキャッシングを利用します。 – Bob77

答えて

1

はVB6のためfilewatcherでは、.NETとの相互運用によって、それを試してみてくださいまたはこのVB6 Implementation

+0

これは私がやることだと思います。その属性を使ってファイルの変更を検出できるかどうかを知ることは、まだ素晴らしいことです。 – dlras2

+0

アーカイブ属性を調べるとよいでしょう。ファイルが変更されたときに有効になります。 –

0

このシナリオでは、プログラムが使用している各ファイルの内容のハッシュを保持し、各ファイルを定期的にチェックすることができます。ハッシュが最後にチェックした時と異なる場合、内容が変更されたか、この名前変更のシナリオによって引き起こされた別のファイルです。あなたが必要としている何

+0

この問題は、設定を取得する必要があるたびにファイルを開かないようにすることでパフォーマンスを向上させようとしていることです。全体に対してハッシュを実行することは、そのための良い解決策ではありません。 – dlras2

関連する問題