- 追加された行はこの色です。
- 削除された行はこの色です。
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-戻る
--[[リリース情報]]
--[[D層自動生成ツール]]
*目次 [#j12868f0]
#contents
*概要 [#xc7b824c]
本対策を行う事によって、
>「列数が多過ぎるテーブルに対して、D層自動生成機能に拠るDao生成を行って、それを利用すると、~
内部で使用される「動的パラメタライズド・クエリ」の実行エンジン内部で「性能問題が発生する」」
と言う問題が解決される。
*詳細 [#h6fa24fc]
**利用方法 [#u3ba88d1]
***自動生成ツールの設定変更 [#c6649c34]
DaoGen_Toolのapp.configを以下の様に変更し、使用するテンプレートを変更する。
-
<add key="DaoTemplateFileName" value="DaoTemplate"/>
>↓ ↓ ↓
-
<add key="DaoTemplateFileName" value="DaoTemplate2"/>
***キャッシュ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");
**仕様詳細 [#z0f1f563]
-キャッシュは各自動生成Daoに、staticメンバのConcurrentDictionaryとして仕込まれている。
-ConcurrentDictionaryのキーは、「キャッシュID + 読込ファイル名」となっている。
-キャッシュを行う箇所で、一意のキャッシュIDを指定する。
--通常は、一意の異なるキャッシュIDを指定する。~
--同じキャッシュIDを使用して異なる箇所で同じキャッシュを利用することもできる。
---ただし、双方の個所で、当該自動生成Daoに指定するパラメタ・セットが同じになる必要がある。
---また、異なる自動生成Daoに同じキャッシュIDを指定しても同じキャッシュを使用することはできない。
-キャッシュIDには、以下の様な、一意性のあるモノを使用できる。
--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/