2016-05-07 8 views
0
public static IEnumerable<Student> GetStudents() 
{ 
    List<Student> students = (List<Student>)HttpContext.Current.Cache.Get("GetAllStudentWithImg"); 

    if (students!= null) 
    { 
     return students ; 
    } 

    students = new List<Student>(); 

    using (PrincipalContext context = GetPrincipalContext()) 
    { 
     using (UserPrincipal uprinc = new UserPrincipal(context)) 
     { 
      using (PrincipalSearcher psearcher = new PrincipalSearcher(uprinc)) 
      { 
       students = psearcher.FindAll() 
            .Select(x => new Student((DirectoryEntry)x.GetUnderlyingObject())) 
            .ToList(); 
      } 
     } 
    } 

    HttpContext.Current.Cache.Add("GetAllStudentWithImg", students, null, 
            DateTime.UtcNow.AddMinutes(60), 
            System.Web.Caching.Cache.NoSlidingExpiration, 
            System.Web.Caching.CacheItemPriority.Normal, null); 

    return students; 
} 

私のデータベースから値を取得するためにこの関数を作成しましたが、それは動作しますが、ゆっくりと読み込まれます。画像はそれほど大きくないので、コンテンツではありません誰かが自分のコードを改善するのを手助けしたいですか?私のデータベースからより速く値をロードする方法

私はあなたがデータベースに照会コードが表示されますが、私は、問題はここにあると思われていない、すべてのコードが表示されない
+0

提案、基本データと画像関連データを読み込むための呼び出しが2つあります。 –

+0

*データベースから読み込んでいない* - このコードは検索中です** Active Directory ** .....質問は***なぜ***あなたは基本的なオブジェクトを取得する必要がありますか?それはかなり高価な呼び出しです - あなたはその呼び出しなしで行うことができますか? –

+0

@marc_s Active Directory ...どこですか? – lal

答えて

1

psearcher.FindAll().Select(.... 

FindAll()はこの後、データベーステーブル内のすべてのレコードを返します。コレクションで必要なものを選択します。

優れたパフォーマンスのソリューションは、データベースに必要なものだけを照会することです。

は、すべてのデータを見つけることができませんが、あなたは

+0

実際に、彼はまったくフィルタリングしていません。この場合、実際に選択するのではなく、選択を使用して結果を変換するだけです。 – Paul

+0

Thansk ..それは私が見ていたものでした。私の最大の問題は写真でした。 – GhostReccon

1

は、のfindAllとどこの間で比較ですこれをチェックしてください必要なものだけを見つける:C# FindAll VS Where Speedを。

さらに、これらのPrincipalContext、UserPrincipal、およびPrincipalSearcherの間で継承を使用しないのはなぜですか?

0

FindAll()はLinqメソッドではありません。 List(Of T)メソッドであり、Linqであり遅延実行をサポートするWhere()とは対照的に、Deffered実行を持たない。

関連する問題