2010-08-31 31 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();