在開發中,如大量獲取數據時,不但速度慢,而且影響效率,下面就給大家介紹下用多線程獲取數據庫數據:
1.首先新建一個獲取實體列表的方法,如想獲取數量或其他類型,需要另外編寫方法,這里只是做簡單的介紹:
/// <summary> /// 根據SQL語句返回實體集合,這里不能返回IQueryable,否則在線程中會獲取不到上下文對象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <returns></returns> public static List<T> GetModelList<T>(string sql) { using (RoomsEntities rooms = new RoomsEntities()) { return rooms.Database.SqlQuery<T>(sql).ToList(); } }
2.多線程執行過程:
//開始計時 Stopwatch sw = new Stopwatch(); sw.Start(); string sqlMember = ""; string sqlRoom = ""; List<Member> MemberList = null; List<Room> RoomList = null; using (RoomsEntities rooms = new RoomsEntities()) { var queryMember = rooms.Member.Where(u => u.IsStop == false); sqlMember = queryMember.ToString(); //這里ToString()后取到的是SQL語句 var queryRoom = rooms.Room.Take(10); sqlRoom = queryRoom.ToString(); } //開啟兩個線程執行 Task t1 = Task.Factory.StartNew(() => { MemberList = GetModelList<Member>(sqlMember); }); Task t2 = Task.Factory.StartNew(() => { RoomList = GetModelList<Room>(sqlRoom); }); Task.WaitAll(t1, t2); //等待兩個線程完成,這里等待的t1,t2線程是同時執行的 sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("運行時間:" + ts2.TotalMilliseconds); Console.ReadKey();