2010-08-31 33 views
1

我有以下代码:ComboBox.DataSource分配服用年龄

List<string> list = SomeFunction(); 
this.myComboBox.DataSource = list; 

出于某种原因,分配给数据源,走的时间(约1.4秒),数量惊人,在列表中只有4个项目。

任何想法,为什么这是?

编辑:

SomeFunction()看起来在磁盘上特定.xml文件存在几个文件夹,如果它存在,把包含文件夹名称到其返回列表。

调查:

我坚持围绕数据源分配给DateTime.Now一个电话,它每次回来在〜1400ms。这使我相信它完全是导致它的DataSource任务。但是,我创建了一个虚拟List; Add()直接将字符串给它。该数据源在〜200ms内执行。所以也许这不是DataSource的任务,并且与SomeFunction有关。 但是,然后我试着只是逐个插入字符串,并在〜0ms执行。

+0

你能发表SomeFunction()的代码吗?我认为SomeFunction()是需要时间的... – 2010-08-31 06:06:50

+0

不幸的是,这不是SomeFunction,它需要时间。我坚持使用代码来测试DataSource赋值时间自身的时间量,并且它以1.4secs的形式出现。去除赋值(但仍然调用SomeFunction)几乎是瞬间的。 – Smashery 2010-08-31 06:17:13

回答

0

这是在我加载文件的SelectedIndexChanged事件处理程序中。事实证明,对DataSource成员的分配将自动更改为SelectedIndex(假设存在),但调用Items.Add不会这样做。

在我而言,这是一个问题,因为我想手动选择要加载的项目,所以它被装载两次 - 一次自动由于所造成的分配(不期望的),一旦手动事件。

+0

虚拟列表如此之快的原因是因为它们不是存在的文件名,所以事件处理程序没有做任何事情。 – Smashery 2010-08-31 06:44:00

+1

但是,SomeFunction代码的总体轮廓仍然很有帮助(以及当时与组合框交互的任何其他代码,例如您提到的SelectedIndexChanged),只是因为它有可能(这是我的第一个想法)该函数返回一个懒惰的IEnumerable(linq),它在访问时被评估,而不是在函数返回时被评估。 – 2010-08-31 06:55:25

-3

尝试直接将您的功能分配给ComboBox。

例如: this.myComboBox.DataSource = SomeFunction();