多数のレコードを持つ関連付けプロパティにアクセスする速度に問題があります。DevExpress eXpressApp Framework(XAF)とeXpress Persistent Objects(XPO):関連付けの読み込み時間を短縮するにはどうすればよいですか?
親クラスがMyParent
のXAFアプリがあります。
MyParent
には230件のレコードがあります。
MyParent
には、MyChild
という子クラスがあります。
MyChild
に49,000レコードあります。
私は標準的な方法でMyParent
とMyChild
の間で定義された関連性があります。MyChild
で
:
// MyChild (many) and MyParent (one)
[Association("MyChild-MyParent")]
public MyParent MyParent;
そしてMyParent
中を:
[Association("MyChild-MyParent", typeof(MyChild))]
public XPCollection<MyCHild> MyCHildren
{
get { return GetCollection<MyCHild>("MyCHildren"); }
}
MyParent1
と呼ばれる特定のMyParent
レコードがあります。
MyParent1
には、630 MyChild
のレコードがあります。
MyUI
というクラスのDetailViewがあります。
MyUI
DetailViewの1つのドロップダウンでアイテムを選択し、別のドロップダウンリストにMyChild
オブジェクトを追加する必要があります。
ユーザは、最初のドロップダウンでMyParent1
を選択します。
MyUI
にプロパティを作成して、最初のドロップダウンで選択した値のオブジェクトをMyChild
に戻しました。ここで
は、プロパティのコードです:
[NonPersistent]
public XPCollection<MyChild> DisplayedValues
{
get
{
Session theSession;
MyParent theParentValue;
XPCollection<MyCHild> theChildren;
theParentValue = this.DropDownOne;
// get the parent value
if theValue == null)
{
// if none
return null;
// return null
}
theChildren = theParentValue.MyChildren;
// get the child values for the parent
return theChildren;
// return it
}
それが唯一のDetailVIewのUIのために必要とされているので、私はNonPersistent
としてDisplayedValues
プロパティをマーク。私はそれを持続させることが初めてのコレクションの作成をスピードアップし、ドロップダウンを埋めるために使用された後、私はそれを必要としないので、私はそれを格納する時間を費やしたくないと思います。
問題は、theParentValue = this.DropDownOne
に電話するのに45秒かかります。
仕様:
- Vista BusinessのRAM
- 2の
- 8ギガバイト33 GHzのE6550プロセッサ
- SQL Server Expressは、2005
これは、ユーザーがDetailViewの多くのドロップダウンの1を待つためには長すぎます。
私は2つの質問があるので、私はビジネスケースをスケッチするために時間がかかった:
にはどうすれば関連する値が速く読み込むことができますか?
ドロップダウンをプログラムする別の(簡単な)方法と、より速く実行するDetailViewがありますか?
はい、あなたは630がドロップダウンに表示する、あまりにも多くの項目ですが、このコードはそう長く取っている私は速度が630〜100 49,000ないに比例していると思われると言うことができますがドロップダウンの項目は私のアプリにとってあまりにも多くないでしょう。
私のアプリではこれらのドロップダウンがかなり必要なので、それぞれにもっと複雑なフィルタリング基準を入力させるのは適切ではありません。ユーザーは1つの値を選択し、関連する値を参照する必要があります。
大量のレコードを見つけるのが遅いのは分かりますが、数百を見つけるのはそれほど長くはありません。