パラメータ保存のためにファイルをより効率的に使用するために、いくつかのレガシーコードを更新しています。基本的には、一度読み込まれるとすべての設定が内部的にキャッシュされるため、ファイルを開かずに再び読み込むことができます。キャッシュを使用する前に、キャッシュの作成時間をファイルの最終変更時間と比較し、更新されたファイルでキャッシュを再作成します。これは、ユーザーがファイルの名前を変更した場合を除いて、正常に機能します。これは、そのアクションが最後に変更された時刻を更新しないためです。ファイルの名前が変更されたかどうかを確認するにはどうすればよいですか?
私はapp.ini
を削除し、app.ini
にコピーの名前を変更し、その後、私のプログラムのapp - copy.ini
外を変更、app - copy.ini
に私のapp.ini
をコピーするのであれば、私のプログラムは現在、時代遅れのキャッシュを使用しています。私のプログラムがapp.ini
の削除をキャッチしてキャッシュをクリアしたとしても、コピーの名前が変更されたときにキャッシュを再構築しません。プログラムは非常に長い時間無人で実行されるように設計されていますので、ファイルを継続的に監視することは避けてください。パラメータを読み込む必要がある場合にのみチェックしてください。
おそらくあなたは、これは本当にユーザーが検討するパフォーマンスの向上を達成することをチェックしたようなものを使用することができます価値ある? – MarkJ
@ MarkJ - いいえ、まだありません。私はちょうどキャッシングコードを書いて、まもなくパフォーマンスの向上をテストします。これは主にVB6で再習得するための練習でしたが、パフォーマンスが向上したら、素晴らしいものになりました。しかし、私の主な質問はファイル名の変更を検出することでした。特定のアプリケーションは単なる例です。ファイルウォッチャーはおそらく問題を解決しますが、本当にその質問に答えません。 – dlras2
"NTFSは、最後にアクセスしてから1時間後までにファイルの最終アクセス時刻を更新します。"これは、これらのタイムスタンプがファイルシステムのオーバーヘッドを削減するために低揮発性属性であるためです。 INIファイルは、それ自体が高度に揮発性であることを意味するものではなく、手作業による編集を外部的に実現可能にする。プロセスを厳重に制御する必要がある場合は、ユーザーが直接変更しないファイルに設定UIを提供する必要があります。次に、必要に応じて、制御された方法で、データ内に独自の高揮発性タイムスタンプを使用することができます。パフォーマンスのためにシステムレベルのファイルキャッシングを利用します。 – Bob77