• .net通用底层搭建


    .net通用底层搭建

    之前写过几篇,有朋友说看不懂,有朋友说写的有点乱,自己看了下,的确是需要很认真的看才能看懂整套思路。

      于是写下了这篇。

    1.这个底层,使用的是ado.net,微软企业库

    2.实体类对应执行sql语句后数据库返回的结果视图你要获取的列,而实体类与数据访问层基类乃是最重要的一环,用到了反射,缓存,拼接语句,高度封装

    下面,先看添加操作

    1.十个线程,同时执行,各自插库一万条

    2.id从原来的程序里加锁处理改为采取数据库自增id,交给数据库处理,想了很久,觉得未来几年都还是单数据库服务器的,所以,用自增吧

    执行前的查询

    运行网站,

    50多秒,每个线程互相等待,数据库帮我们做了并发处理,最后十万条数据57秒全部执行完毕

    以下是添加操作的代码

    1.页面的

     View Code

    注释部分是用来更新的,方法体外的是全局变量

    2.派生数据访问层

    复制代码
     /// <summary>
        /// 日志数据访问层
        /// </summary>
        public class LogManager : BaseDal
        {
            public LogManager() { }
    
            public LogManager(Type type) : base(type) { }
    
            /// <summary>
            /// 添加日志
            /// </summary>
            /// <param name="logInfo">日志信息</param>
            public  bool Add(LogInfo logInfo)
            {
                bool result = false;
    
                Parameters parms=GetParameters(logInfo);
                parms.AddOutParameter("@Identity",DbType.Int32,int.MaxValue);
                int Identity=0;
                Identity = base.ExecuteSql_GetIdentity(parms);
    
                if (Identity>0)
                    {
                        SiteCache.Max(SiteCacheKey.CK_MaxID_ + info_table_name, Identity);
                        result=true;
                    }
    
                return result;
            }
    }
    复制代码

    3.基类,数据访问层基类,这里还是把整个类贴上会更方便看。采取了缓存策略。

     View Code

    上面的代码就是十线程同时插库1万条的情况,用了50多秒,也就是执行了十万次add方法

    然后,开始看更新记录的情况

    更新这里,改为用20线程同时更新吧

    1.页面代码

     View Code

    2.派生数据访问层

     View Code

    3.数据访问层基类

     View Code

    4.更新锁将会改为全局静态对象

    复制代码
    /// <summary>
        /// 全站锁机制
        /// </summary>
       public static class LockHelper
        {
            #region 表锁,用于高并发更新的时候
    
           public static object tableLock_SYS_Log = new object();
    
            #endregion
        }
    复制代码

    大概就是上面说的了......

    仍在改善中,不过现在开始要忙起来了......

    公司的活很忙,考驾照,私人的事......

    如果你有缘看到这篇文章,理解了我的思路,还有更好的建议的话,留下您的贵言!!!

  • 相关阅读:
    初始WebApi(1)
    百度编辑器UEditor,保存图片的配置问题
    通过简单的ajax验证是否存在已有的用户名
    .NET MVC中登录过滤器拦截的两种方法
    MySQL数据库innodb_rollback_on_timeout参数
    MySQL如何删除#sql开头的临时表
    SQL基础(2)
    ORDER BY导致索引使用不理想
    SQL基础
    MySQL传统点位复制在线转为GTID模式复制
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3458559.html
Copyright © 2020-2023  润新知