zoukankan      html  css  js  c++  java
  • 多线程获取数据库数据

    在开发中,如大量获取数据时,不但速度慢,而且影响效率,下面就给大家介绍下用多线程获取数据库数据:

    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();
  • 相关阅读:
    2020 8 17 每日总结
    2020 8 9 每周总结
    2020 8 15 每日总结
    2020 8 13 每日总结
    2020 8 16 每日总结
    2020 811 每日总结
    2020 8 14 每日总结
    图的储存 各种方式的优缺点
    主席树 可持久化线段树基础知识入门详解
    NOIP复赛涉及面最广的知识点简述
  • 原文地址:https://www.cnblogs.com/genesis/p/6651355.html
Copyright © 2011-2022 走看看