読み取り/処理/書き込みを行うプログラムを作成しようとしています。
プログラムにローカルパスを指定するとすべてが正常に機能しますが、ローカルエリアネットワークを介してファイルを処理するときに大量のメモリを使用するという異常な問題に直面します。
ファイルパスが「//network_address/folder/*.ext
」のようなものである場合、プログラムは約4G RAM(パスが「c:/folder/*.ext
」のようなものである場合の500-1Gとは対照的に)を使用します)
Process Monitorを使用して何が起こっているかを確認し、「c:\windows\csc\v2.0.6\namespace
」フォルダーで一貫した読み取りエラーが発生していることに気付きました。これは存在すら知らなかったものです。調べてみると、ファイルをネットワークサーバーと同期するため、おそらくネットワークファイルをオフラインで表示するために使用されていることがわかりました。
上記の失敗は、ファイルへの書き込みプロセスが開始される直前(読み取り前ではなく)に発生し、名前空間フォルダーが使用されず、何も同期されず、ネットワークドライブへの実際の書き込みが成功しました。
フォルダを同期するオプションを設定していません...(そしてしたくありません)
そのフォルダーの所有権を取得するとすぐに、メモリ使用量が減少しました(ただし、Process Monitorで読み取りエラーが発生しました)。
だから...私の問題は、許可されていないことをしようとしていて、許可されていないことをしようとしている間、失敗して最終的に置くまで、データを保持するために大量のメモリを使用していることだと思いますそれが属するデータ...
解決策:私が許可されていないことをしないでくださいね?
プログラムがファイルを同期したり(それが起こっている場合)、読み取り時にその名前空間フォルダーを使用したりするのを防ぐ方法(できればコードで実行できるコマンドライン、または変更できるレジストリエントリ)はありますか?ネットワークドライブ?
Windowsが背後でファイルを同期し、ネットワークフォルダーに直接ファイルを書き込むのを防ぐにはどうすればよいですか?
あなたはこれをもう理解しましたか?共有内のオフラインファイルを無効にしてみてください。
クライアントPCから試すことができるもう1つのことは、これがWin7/Vistaの場合、オフラインファイルサービスを無効にすることです。
それがどのように機能するかを教えてください。