【メモ】ファイル変更検知の連鎖回避

ファイル同期ソフトの設計において、また興味深い問題が発生。
 
ローカルのファイル・フォルダの変更を検知してリアルタイム同期を行うわけだが、この変更検知が連鎖反応を起こしてしまう、もしくは無駄な比較処理が発生する可能性が見えてきた。
 
通常はユーザーのファイル変更を検知してその同期を行う。が、リモートに新しいファイルがあってローカルが更新された時にもファイルシステム的には更新が発生する。
つまり「ファイル変更検知」→「ローカルファイル更新」→「ファイル変更検知」→「変更なし」という処理になってしまう。
ローカルで自分自身が行った変更「のみ」を検知から除外すればいいのだが、それを自動で行ってくれる仕組みはない。よって、自分がローカルで行うファイル処理を事前に予約し、それに該当するフォルダでの変更を検知から除外しなくてはいけない。
が、もしその予約されたフォルダでユーザーによるファイル変更が同時に発生すると検知漏れとなってしまう。
 
やはりローカルのファイルリストをメモリ上に持って、リモートとの無駄な比較を回避するしかないようだ。が、大量のファイルが存在するフォルダを同期対象とするとそのファイルリストの管理のために大量のメモリを消費してしまうことになる。
(例:C:\Program Files\Program Name\SubFolder\Data.dat の場合、ファイル名は8文字しかないのに、パスを含めると48文字分のメモリを消費する。フォルダ階層が深い場所に大量のデータがあれば、パス情報の分だけメモリ消費が膨れ上がることになる)
ファイルのリストをなるべくコンパクトに(フォルダ階層情報を重複させずに)格納する方法を検討中。