У меня возникла проблема со скоростью доступа к свойству ассоциации с большим количеством записей.DevExpress eXpressApp Framework (XAF) и стойкие объекты eXpress (XPO): как ускорить время загрузки ассоциаций?
У меня есть приложение XAF с родительским классом под названием MyParent
.
Имеет 230 записей в MyParent
.
MyParent
имеет детский класс под названием MyChild
.
Имеются 49 000 записей в MyChild
.
У меня есть связь, образованную между 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"); }
}
Там в конкретных MyParent
запись под названием MyParent1
,
Для MyParent1
есть 630 MyChild
записей.
У меня есть DetailView для класса под названием MyUI
.
Пользователь выбирает элемент в одном раскрывающемся списке в подробном представлении MyUI
, и мой код должен заполнить еще один раскрывающийся список объектами 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
}
Я ознаменовал DisplayedValues
собственности как NonPersistent
, так как он необходим только для ПИ DetailView. Я не думаю, что его сохранение ускорит создание коллекции в первый раз, и после того, как она будет использоваться для заполнения раскрывающегося списка, мне это не нужно, поэтому я не хочу тратить время на ее хранение.
Проблема в том, что для вызова theParentValue = this.DropDownOne
требуется 45 секунд.
Характеристики:
- Vista Business
- 8 Гб оперативной памяти
- 2.33 ГГц E6550 процессор
- SQL Server Express 2005
Это слишком долго для пользователей ждать один из многих раскрывающихся в DetailView.
Я взял время, чтобы набросать бизнес дело, потому что у меня есть два вопроса:
Как я могу сделать соответствующие значения нагрузки быстрее?
Есть ли другой (простой) способ программирования выпадающих списков и DetailView, которые работают намного быстрее?
Да, вы можете сказать, что 630 является слишком много элементов для отображения в раскрывающемся списке, но этот код занимает так много времени, я подозреваю, что скорость пропорциональна 49000, а не на 630. 100 элементов в раскрывающемся списке не будет слишком много для моего приложения.
Мне нужно довольно много этих выпадающих списков в моем приложении, поэтому не следует заставлять пользователя вводить более сложные критерии фильтрации для каждого из них. Пользователь должен выбрать одно значение и увидеть связанные значения.
Я бы понял, если поиск большого количества записей был медленным, но поиск нескольких сотен не должен длиться так долго.