###前提・実現したいこと
Windows7 32bit professionの入ったPCが2台以上あり、1台をサーバー(以後、サーバー)に、他をクライアントとして動作しています。
クライアントの内、1台(以後、監視クライアント)だけサーバーのログ監視用にサーバーのログを共有フォルダ(IP指定)でアクセス可能にしています。
監視プログラム(C#)で
・100msec毎ディスパッチする
・前回最後尾の行から追加行があれば動作する
・特定の文字列がふくまれていれば、textboxに表示する
という動作をさせているのですが、10sec近くかかって表示されます。
サーバー上で直接実行すると、1secかからずに表示されます。
共有フォルダ上にあるファイルの更新を確認するに当たって、何か良い方法をご存じでしたらご教授願えないでしょうか?
###該当のソースコード
ディスパッチ(100msec timerWatch)
private void timerWatch_Tick(object sender, EventArgs e) { long nowSize = new FileInfo(getFileFullPath()).Length; if(mFileSize < nowSize) { getFileData(getFileFullPath(), mLastPosition); mLastPosition = getFileSeek(getFileFullPath()); mFileSize = nowSize; } }
データ取得(getFileData)
private void getFileData(String file, long position) { FileStream fs = new FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite); StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); fs.Seek(position, System.IO.SeekOrigin.Begin); while(sr.Peek() > -1) { String data = sr.ReadLine(); 抽出、テキスト表示などの処理 } sr.Close(); fs.Close(); } ``` 最後尾を取得(getFileSeek) ``` private long getFileSeek(String file) { FileStream fs = new FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite); long length = fs.Length; fs.Close(); return length; } ``` ###補足情報(言語/FW/ツール等のバージョンなど) Windows7 32bit professional Visual Studio 2016(c#)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/19 00:40