「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[リリース情報]] --[[D層自動生成ツール]] *目次 [#j12868f0] #contents *概要 [#xc7b824c] -自動生成Daoにクエリを再利用する~ クエリ・キャッシュ機能が追加された(v02-50から利用可能)。 -本機能を利用する事によって、 >「列数が多過ぎるテーブルに対して、D層自動生成機能に拠るDao生成を行って、それを利用すると、~ 内部で使用される"動的パラメタライズド・クエリ"の実行エンジン内部で"性能問題が発生する"」 >と言う問題が解決される。 ※ 本修正は、v02-50に含まれる予定ですが、~ テンプレート修正だけなので旧バージョンと互換性があり、~ &color(red){v02-50以前の旧バージョンにも適用可能};となっている。 *詳細 [#h6fa24fc] **利用方法 [#u3ba88d1] ***自動生成ツールの設定変更 [#c6649c34] DaoGen_Toolのapp.configを以下の様に変更し、使用するテンプレートを変更する。 -app.config -- <add key="DaoTemplateFileName" value="DaoTemplate"/> >↓ ↓ ↓ -- <add key="DaoTemplateFileName" value="DaoTemplate2"/> -DaoTemplate2 --https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/files/tools/DGenTemplates/DaoTemplate2.cs --https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/files/tools/DGenTemplates/DaoTemplate2.vb ***クエリ・キャッシュIDを指定 [#qc412f52] クエリ・キャッシュを行う箇所で、自動生成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"); コレにより、 -2回目以降は[[動的パラメタライズド・クエリ]]を、 -処理済みの[[静的パラメタライズド・クエリ]]として、 扱う事が出来る。 **仕様詳細 [#z0f1f563] -クエリ・キャッシュは各自動生成Daoに、staticメンバのConcurrentDictionaryとして仕込まれている。 -ConcurrentDictionaryのキーは、「クエリ・キャッシュID + 読込ファイル名」となっている。 -クエリ・キャッシュを行う箇所で、一意のクエリ・キャッシュIDを指定する。 --通常は、一意の異なるクエリ・キャッシュIDを指定する。~ --同じクエリ・キャッシュIDを使用して異なる箇所で同じクエリ・キャッシュを利用することもできる。 ---ただし、双方の個所で、当該自動生成Daoに指定するパラメタ・セットが同じになる必要がある。 ---また、異なる自動生成Daoに同じクエリ・キャッシュIDを指定しても同じクエリ・キャッシュを使用することはできない。 -クエリ・キャッシュIDには、以下の様な、~ 当該個所の当該自動生成Daoに一意性を与え得る値を使用できる。 --GUID(ハード・コーディング) --呼出し元のクラス.メソッドの完全修飾名 **注意点 [#c7e9af0d] 本機能は、[[動的パラメタライズド・クエリ]]の、 -パラメタ・セットが同じになる地点でのクエリ・キャッシュを可能にする。 -パラメタ・セットが異なる地点で、 --同じクエリ・キャッシュIDを使用してクエリ・キャッシュを行うと、~ --パラメタライズド・クエリのパラメタ・エラーが発生する。 >ことになる。 -Guid.NewGuid() メソッドはランダム値になり、箇所を特定できないので使用不可。 *参考 [#s8c64910] -Issue #332 · OpenTouryoProject/OpenTouryo~ Performance improvement of automatically generated Dao.~ https://github.com/OpenTouryoProject/OpenTouryo/issues/332 -Open棟梁:Dao自動生成機能の潜在的な性能問題が完全に解決される。 - OSSコンソーシアム~ https://www.osscons.jp/jo1qzb1y1-537/