我在访问具有大量记录的关联属性时遇到了问题。
我有一个 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
,有 630MyChild
条记录。
我有一个名为MyUI
.
用户在 DetailView 的一个下拉列表中选择一个项目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 的 UI。我不认为第一次持久化它会加快集合的创建,在它用于填充下拉列表之后,我不需要它,所以我不想花时间存储它。
问题是调用需要 45 秒theParentValue = this.DropDownOne
。
眼镜:
- 远景商务
- 8 GB 内存
- 2.33 GHz E6550 处理器
- SQL Server 速成版 2005
这对于用户来说等待 DetailView 中的许多下拉菜单之一太长了。
我花时间草拟商业案例,因为我有两个问题:
如何使关联的值加载更快?
是否有另一种(简单)方法可以对运行速度更快的下拉菜单和 DetailView 进行编程?
是的,您可以说 630 项太多,无法在下拉列表中显示,但是这段代码需要很长时间,我怀疑速度与 49,000 成正比,而不是与 630 成正比。下拉列表中的 100 项将我的应用程序不会太多。
我的应用程序中需要很多这样的下拉菜单,因此不适合强制用户为每个下拉菜单输入更复杂的过滤条件。用户需要选择一个值并查看相关值。
如果查找大量记录很慢,我会理解,但查找几百条记录不应该花那么长时间。