多線程獲取數據庫數據


在開發中,如大量獲取數據時,不但速度慢,而且影響效率,下面就給大家介紹下用多線程獲取數據庫數據:

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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM