У меня проблема со скоростью доступа к свойству ассоциации с большим количеством записей.
У меня есть приложение XAF с родительским классом с именем MyParent
.
В MyParent
.
230 записей.
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
DetailView, и мой код должен заполнить другой раскрывающийся список 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 - это слишком много элементов для отображения в раскрывающемся списке, но этот код занимает так много времени, я подозреваю, что скорость пропорциональна 49 000, а не 630. 100 элементов в выпадении Даундаун не будет слишком большим для моего приложения.
Мне нужно довольно много таких выпадающих списков в моем приложении, поэтому нецелесообразно заставлять пользователя вводить более сложные критерии фильтрации для каждого из них. Пользователь должен выбрать одно значение и увидеть соответствующие значения.
Я бы понял, если бы поиск большого количества записей был медленным, но поиск нескольких сотен не должен занимать так много времени.