Fork me on GitHub
.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
    }
复制代码

 

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

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

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

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

 

 

posted on 2013-12-04 22:55  HackerVirus  阅读(391)  评论(0编辑  收藏  举报