程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中如何優化列表遍歷速度

C#中如何優化列表遍歷速度

編輯:C#入門知識

一個數據庫表(id,name,…)中有10萬條記錄,查找name=’guoguo‘可能需要很長時間,但是如果對name建立了索引,那麼再用name=’guoguo‘來查詢將變得非常快(有多快?自己可以去試試)。

相應的,有時候我們的代碼裡面會用到List<T>,Array來存儲一組數據。我們以一個例子來說明一下。

定義數據類型: 

       ID { ;   Name { ;   Age { ; 

。從List中按照name找到對應的UserInfo可以用以下代碼:

        List<UserInfo> UserInfo GetUserInfoByName( ( i = ; i < _userinfos.Count; i++= (ui.Name ==  UserInfo GetUserInfoByName_Find( _userinfos.Find((temp) => temp.Name ==

兩個方法其實都是使用遍歷列表的方式去比較、查找;我做了實驗,如果列表中有10萬條記錄,分別執行“查找第5萬個元素”1000遍的耗時為:

GetUserInfoByName

1877毫秒

GetUserInfoByName_Find

2290毫秒

也就是說平均一次要2毫秒左右(Find效率還更低);

OK,接下來我們要試著借鑒數據庫的方式給List建立索引。 

         List<UserInfo> { =<, UserInfo> 

         

         <, UserInfo> userIndex =  Dictionary<, UserInfo> ( item =

MakeIndex方法在Userinfos的set屬性器裡面調用;那麼查詢的方法就應該這麼寫: 

         UserInfo GetUserInfoByNameEx(

這麼簡單?對,就是這麼簡單,而且,效率特別高。與上面的兩個方法一起進行比較:

建立索引+查找10萬次=36毫秒!

原因就是Dictionary[Key]方法的時間復雜度為O(1),幾乎不耗時。

以下是示例的所有代碼:

示例代碼

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved