画像を読み込む場合に、画像ファイルのサムネイルを作成するのですが、そのときに同時に画像のサイズなどの基礎的情報、EXIFなどの情報、さらに後に画像での色検索などに使うために色情報を取得しています。
サムネイルを作成するのは非常に長く重い処理になりますので、現状でもサムネイル読み込み処理はスレッドを1つ使用しています。それでも、色情報の取得 (といっても現在のところはRGB色空間上の3次元ヒストグラムをとってくるだけです) には多少時間がかかりますし、EXIF情報の取得なども同様です。
とりあえず現状でもDBコネクションの再利用などは行うようにしていますが、それでもまだまだ改善の余地はあります。処理速度を改善するにはボトルネックを最適化すればよいのですが、とりあえずスレッドでもう少し処理を分割してみることを検討してみます。
処理の流れは次のようになります。EXIF等の情報取得はまったく別の処理になりますのでここでは示していません。
データベースはふたつあり、サムネイルのキャッシュDBと画像情報DBです。 基本的には画像の縮小、色情報を取得、DBへのストア処理くらいですので、それらを3つのスレッドに分割するとよいかもしれません。もっとも現状ではスレッド間の情報には共有メモリを使用せずに非同期キュー2つを用いているので、単純に処理を分割したからといって早くなるわけでもありません。安全に共有メモリを利用できる方策を検討することが先になるでしょう。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。