図面などを管理するシステムと連携して,図面のビューワを作成しています。
主にTIFFがあり,シングルページのものからマルチTIFFも存在しています。
またA1~A4までいろんなバリエーションがあります。
LoadOptions, ViewerSettings,JpgViewOptionsをいろいろ設定してみているのですが,
読み込み速度を向上する事は可能でしょうか?
使用しているバージョンは 20.11.0,DotNetでFW4.6.1のWindowsアプリです。
こんにちは @kosuke_baba.rsg.kobe
異なるページサイズの画像の TIFF ファイルの処理を高速化する必要がありますか?
パフォーマンスを測定するためのサンプルファイルとコードはありますか?
返信ありがとうございます。
プログラムの一部を抜粋しました。
このロジックで一番下のTIFFを処理すると20秒くらかかります。
実際の図面も2MBくらいのTIFFで同様の時間かかっています。
Dictionary<Int32, MemoryStream> pages = new Dictionary<Int32, MemoryStream>();
MemoryPageStreamFactory pageStreamFactory = new MemoryPageStreamFactory(pages);
FileType fileType = FileType.FromExtension(Path.GetExtension(zumen.FILE_NAME));
LoadOptions loadOptions = new LoadOptions(fileType);
ViewerSettings viewerSettings = new ViewerSettings(CustomViewerLogger.Get());
using(Viewer viewer = new Viewer(fullPath, loadOptions, viewerSettings)) {
JpgViewOptions viewOpts = new JpgViewOptions(pageStreamFactory);
viewer.View(viewOpts);
}
サンプルのTIFFは下記を使用しました。
https://www.fileformat.info/format/tiff/sample/1f37bbd5603048178487ec88b1a6425b/view.htm
おはようございます。
サンプル作成をありがとうございます。こちらも3秒弱程度で実行されました。
シンプルなコードで実行する事でボトルネックが判明いたしました。
TIFFファイルなのですが,別サーバに保管しているため共有フォルダにアクセスしています。
ネットワークパスに変える事で,3秒⇒20秒になりました。
ローカルファイルアクセスでないと速度向上は難しいでしょうか?
こんにちは @kosuke_baba.rsg.kobe
ファイルはサーバーからローカルコンピューターにどのくらいの速さでコピーされますか? たぶん、ネットワークを介したデータ転送の速度に制限がありますか?
頂いたサンプルにて,
1.直接ローカルを処理するのに2.5秒,
2.ネットワークパスからだと20秒,
3.ネットワークパスからローカルコピーして処理すると,コピー含めても3秒
でした。
実行サンプルは下記です。
コピー処理の有無で,0.7秒くらいの差が出ています。
var sw = new Stopwatch();
sw.Start();
MemoryPageStreamFactory pageStreamFactory = new MemoryPageStreamFactory();
FileType fileType = FileType.FromExtension(Path.GetExtension(“MARBLES.TIF”));
LoadOptions loadOptions = new LoadOptions(fileType);
ViewerSettings viewerSettings = new ViewerSettings(new ConsoleLogger());
String pathLocal = “MARBLES.TIF”;
String pathNetwork = @"\[SERVER_NAME]\Documents#SCAN\MARBLES.TIF";
String pathCopied = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
var mode = MODE.PATH_COPIED;
if(mode == MODE.PATH_COPIED) {
File.Copy(pathNetwork, pathCopied);
}
String path = mode == MODE.PATH_LOCAL ? pathLocal : mode == MODE.PATH_NETWORK ? pathNetwork : pathCopied;
using(Viewer viewer = new Viewer(path, loadOptions, viewerSettings)) {
JpgViewOptions viewOpts = new JpgViewOptions(pageStreamFactory);
viewer.View(viewOpts);
}
sw.Stop();
Console.WriteLine(“Time Taken: " + sw.Elapsed.TotalMilliseconds.ToString(”#,##0.00 ‘milliseconds’"));
//LOCAL: Time Taken: 2,091.04 milliseconds
//NETWORK: Time Taken: 35,077.98 milliseconds
//COPIED: Time Taken: 2,727.15 milliseconds
こんにちは @kosuke_baba.rsg.kobe
このコードの実行時間はどのくらいですか?
var sw = new Stopwatch();
String pathNetwork = @"[SERVER_NAME]\Documents#SCAN\MARBLES.TIF";
String pathCopied = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
sw.Start();
File.Copy(pathNetwork, pathCopied);
sw.Stop();
Console.WriteLine(“Time Taken for file copy: " + sw.Elapsed.TotalMilliseconds.ToString(”#,##0.00 ‘milliseconds’"));
Time Taken for file copy: 1,069.50 ‘milliseconds’
となりました。
ご対応頂きありがとうございました!
修正されることをお待ちいたします。
このスレッドはクローズされますでしょうか?
了解いたしました。
回答を心待ちにしておきます。