Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

本対策を行う事によって、

「列数が多過ぎるテーブルに対して、D層自動生成機能に拠るDao生成を行って、それを利用すると、
内部で使用される"動的パラメタライズド・クエリ"の実行エンジン内部で"性能問題が発生する"」

と言う問題が解決される。

※ 本修正は、v02-50に含まれる予定ですが、
 テンプレート修正だけなので旧バージョンと互換性があり、
 v02-50以前の旧バージョンにも適用可能です。

詳細

利用方法

自動生成ツールの設定変更

DaoGen_Toolのapp.configを以下の様に変更し、使用するテンプレートを変更する。

  • app.config
    • <add key="DaoTemplateFileName" value="DaoTemplate"/>

↓ ↓ ↓

  • <add key="DaoTemplateFileName" value="DaoTemplate2"/>

キャッシュIDを指定

キャッシュを行う箇所で、自動生成DaoのコンストラクタにキャッシュIDを指定する。

  • // 自動生成Daoを生成
    DaoShippers genDao = new DaoShippers(this.GetDam());

↓ ↓ ↓

  • // 自動生成Daoを生成
    // https://www.guidgenerator.com/online-guid-generator.aspx
    DaoShippers genDao = new DaoShippers(this.GetDam(), 
    "f54d4d7bd5c8441187ec6939c4da7303");

仕様詳細

  • キャッシュは各自動生成Daoに、staticメンバのConcurrentDictionary?として仕込まれている。
  • ConcurrentDictionary?のキーは、「キャッシュID + 読込ファイル名」となっている。
  • キャッシュを行う箇所で、一意のキャッシュIDを指定する。
    • 通常は、一意の異なるキャッシュIDを指定する。
    • 同じキャッシュIDを使用して異なる箇所で同じキャッシュを利用することもできる。
      • ただし、双方の個所で、当該自動生成Daoに指定するパラメタ・セットが同じになる必要がある。
      • また、異なる自動生成Daoに同じキャッシュIDを指定しても同じキャッシュを使用することはできない。
  • キャッシュIDには、以下の様な、
    当該個所の当該自動生成Daoに一意性を与え得る値を使用できる。
    • GUID(ハード・コーディング)
    • 呼出し元のクラス.メソッドの完全修飾名

注意点

本機能は、

  • パラメタ・セットが同じになる地点でのクエリ・キャッシュを可能にする。
  • パラメタ・セットが異なる地点で、同じキャッシュIDを使用してクエリ・キャッシュを行うと、
    パラメタライズド・クエリのパラメタ・エラーが発生することになる。
  • Guid.NewGuid?() メソッドはランダム値になり、箇所を特定できないので使用不可。

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-24 (金) 09:37:17 (4h)