如果说,一个对象保证全局唯一,大家肯定会想到一个经典的设计模式:单例模式,如果要使用的对象必须是线程内唯一的呢?

  数据槽:CallContext,ok看下msdn对callcontent的解释。

  

CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽。数据槽不在其他逻辑线程上的调用上下文之间共享。当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中。

  也就是说,当前线程对对象进行储存到线程本地储存区,对象随着线程的销毁而销毁。

  使用代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static string key = "DbContext-Single";
      public static System.Data.Entity.DbContext Instance
      {
          get
          {
              DbContext temp = CallContext.GetData(key) as DbContext;
 
              if (temp == null)
              {
                  temp = new HelperModelContainer();
                  //放入数据槽中
                  CallContext.SetData(key, temp);
              }
              return temp;
          }
          private set { }
      }

  使用场景:我个人认为,当对象需要线程内全局使用,而其他线程包扩子线程都不能访问的时候使用。比如EF的数据上下午,每次请求都会生成一个线程处理请求,这时候创建一个数据上下文对象给不同的函数使用,最后一起提交就完全可以避免事务的问题。当然也许有人会问我可以创建一个变量来使用,同样可以达到一样的目的,这当然也是可以的,只是这个对象你也是可以和其他线程数据进行交互的,这就违背了线程内唯一的概念了。

  以上仅表示个人观点,理解不对的,欢迎大家指点,谢谢!!!!!

C# 如何保证对象线程内唯一:数据槽(CallContext)【转载】的更多相关文章

  1. C# 如何保证对象线程内唯一:数据槽(CallContext)

    如果说,一个对象保证全局唯一,大家肯定会想到一个经典的设计模式:单例模式,如果要使用的对象必须是线程内唯一的呢? 数据槽:CallContext,ok看下msdn对callcontent的解释. Ca ...

  2. 如何保证对象线程内唯一:数据槽(CallContext)

    CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽.数据槽不在其他逻辑线程上的调用上下文之间共享.当 CallContext 沿执行代码路径 ...

  3. EF 保证线程内唯一 上下文的创建

    1.ef添加完这个对象,就会自动返回这个对象数据库的内容,比如下面这个表是自增ID 最后打印出来的ID  就是自增的结果 2.lambda 中怎么select * var userInfoList = ...

  4. EF上下文对象创建之线程内唯一

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,那么会造成数据混乱,每次创建的对象执行相应的数据库操作,此同时,其他的EF对象内获得的数据可能已经是“过期”的了.即这个数据已经变动 ...

  5. ASP.net如何保证EF操作类线程内唯一

    说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实 ...

  6. EF上下文对象线程内唯一性与优化

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建  ...

  8. .Net普通三层 到 工厂模式->线程内唯一+单元工作模式->WebService分布式三层

    在软件世界分层的思想无处不在 主要是为了提高软件系统的维护性,扩展性,复用性和解耦等 软件的三层构架是一种最基本的分层思想的体现 结构图大体如下: 如此一来,开发人员可以只关注其中一层,而无需关心下一 ...

  9. .Net普通三层->工厂模式->线程内唯一+单元工作模式->WebService分布式三层

    在软件世界分层的思想无处不在 主要是为了提高软件系统的维护性,扩展性,复用性和解耦等 软件的三层构架是一种最基本的分层思想的体现 结构图大体如下: 如此一来,开发人员可以只关注其中一层,而无需关心下一 ...

随机推荐

  1. Modelsim仿真.do脚本示例

    #“#”为注释 #删除原有工程,需重启Modelsim #vdel -all -lib work #退出当前仿真 quit -sim #清空命令行显示 .main clear #创建库,是实际存在的物 ...

  2. Html.Raw用法

    比如有个字符串是这样的<font color='red'>红字</font> 如果是用@Html.Raw('<font color='red'>红字</fon ...

  3. 剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4. 例如, 5 / \ 3 7 / \ / \ 2 4 6 ...

  4. html页面原生video标签隐藏下载按钮

    在写web项目的时候,遇到简介页面有一个单独的简介视频,只有这一个短短的视频所以没有使用任何video组件,所以运用原生video标签就想解决问题. 虽然简介视频是非付费的,但也不希望会有下载按钮或者 ...

  5. java 基础代码

    /** * Created by y0n on 2017/4/17. * 1.输出控制台传递的默认参数 */public class JavaDay001_1 { public static void ...

  6. svn 部署

    安装svn [root@localhost ~]# yum -y install subversion 创建两个目录 一个 数据存储 一个用户密码 [root@localhost ~]# mkdir ...

  7. vmware虚拟机安装了linux(redhat)系统忘记登录密码怎么办

    今天,打开了以前装过的vmware虚拟机,正常启动之后,一直想不起登录密码,怎么都是登录不进去.然后在网上查找资料,最后重置了密码.下面,分享下具体操作过程. 1.重新启动虚拟机,在出现启动进度条时按 ...

  8. MVCC(Multi-version Cocurrent Control)多版本并发控制协议

    MVCC相比2PC是一种更简单有效的分布式事务解决方案. 假设一种场景,一个分布式事务在A,B两个节点更新数据,要么同时成功,要么同时失败. MVCC 中,为每个事务分配一个递增的事务编号,有一个中心 ...

  9. spring boot 单元测试

    Java新手 纯记录 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = OutDemoApplication.clas ...

  10. leetcode 687.Longest Univalue Path

    寻找最长的路径,那么会在左边或者右边或者是从左到跟然后再到右方的路径的. /** * Definition for a binary tree node. * struct TreeNode { * ...