EF一次请求公用一个实例

应用场景:

  我们在程序开发时,对数据库的操作是必不可少的部分,常规的做法是直接使用Using()语句块,在用完后立即释放连接资源,这种做法在桌面应用程序中毫无问题,但是在Web程序中,尤其是在当今大数据,高访问量的时代,响应速度成为了一个网站好坏的很作重要的衡量标准,我们也知道sqlserver的数据库连接其底层也是用socket技术实现的,那么就造成了数据库连接资源非常宝贵,那么怎么才能在web程序中充分利用这个宝贵的连接资源呢?

解决方案:

 1 public class DbContextHelper
 2     {
 3         public static MyDbContext GetCurrentDbContext()
 4         {
 5             #region HttpContext 方式(内部有CallContext实现)
 6             //MyDbContext dbContext = HttpContext.Current.Items["MyDbContext"] as MyDbContext;
 7             //if (dbContext == null)
 8             //{
 9             //    dbContext = new MyDbContext();
10             //    HttpContext.Current.Items.Add("MyDbContext", dbContext);
11             //}
12             //return dbContext;
13             #endregion
14
15             #region CallContex直接实现
16             MyDbContext dbContext = CallContext.GetData("MyDbContext") as MyDbContext;
17             if (dbContext == null)
18             {
19                 dbContext = new MyDbContext();
20                 CallContext.SetData("MyDbContext", dbContext);
21             }
22             return dbContext;
23             #endregion
24         }
25     }
26     public class MyDbContext
27     {
28     }
时间: 2025-01-07 00:36:53

EF一次请求公用一个实例的相关文章

一次请求共用一个实例(值),将(实例)值存储到当前请求线程区

在ef中有个DbContext上下文,如果每次访问数据库都产生一个DbContext那是不好做法,比较好做法是一次请求共用一次DbContext实例,可以将DbContext存储到当前请求线程区. 测试使用当前请求线程存储区代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace RuntimeDemo 7 { 8 /// <sum

MySQL系列之D-2------MySQL多实例添加一个实例

D-2.1   添加一个实例(3309实例) D-2.1.1.创建目录 # cd /data # mkdir 3309/data D-2.1.2.创建my.cnf文件在/data/3309 [client] port=3309 socket=/data/3309/mysql.sock prompt=\\[email protected] \\r:\\m:\\s-> [mysqld] basedir =/mysql datadir =/data/3309/data port =3309 serve

HTTP 请求消息头部实例:

HTTP 请求消息头部实例: Host:rss.sina.com.cn        //客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14              //头域的内容包含发出请求的用户信息. Accept:text/xml,application/xml,applic

确保一个请求共用一个上下文

//职责:确保一个请求共用一个上下文 public class DataBaseContextFactory { //返回基类,这样就可以随意做到切换上下文了 public static DbContext GetDataTabelContext() { //共用一个请求上下文实例 DbContext dbcontext = CallContext.GetData("DbContext") as DbContext; if (dbcontext == null) { dbcontext

arping---发送arp请求到一个相邻主机

arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址.能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息.功能类似于ping. 语法 arping(选项)(参数) 选项 -b:用于发送以太网广播帧(FFFFFFFFFFFF).arping一开始使用广播地址,在收到响应后就使用unicast地址. -q:quiet output不显示任何信息: -f:表示在收到第一个响应报文后就退出: -w timeout:

C#程序只允许运行一个实例的解决方案

最近在做winform的程序中,需要只能打开一个程序,如果已经存在,则激活该程序的窗口,并显示在最前端.在网上google了一哈,找到了很多的解决方案.这里我整理了3种方案,并经过了测试,现和朋友们分享: 一.使用用互斥量(System.Threading.Mutex) 同步基元,它只向一个线程授予对共享资源的独占访问权.在程序启动时候,请求一个互斥体,如果能获取对指定互斥的访问权,就职运行一个实例. 代码 bool createNew;            using (System.Thr

只运行一个实例以及内存泄漏检测

unit 使应用程序只运行一个实例; interface uses Windows; const  // - 互斥体唯一的名字  _Mutex_Name = '{19631971-1976-1981-1989-199319941995}'; var  _Mutex_Handle: THandle; implementation initialization // - 载入时调用的代码 // - 创建互斥体对象_Mutex_Handle := CreateMutex(nil, False, LPC

C# WinForm 判断程序是否已经在运行,且只允许运行一个实例

static class Program {   /// <summary>   /// 应用程序的主入口点.   /// </summary>   [STAThread]   static void Main()   {     Application.EnableVisualStyles();     Application.SetCompatibleTextRenderingDefault(false);     //1.这里判定是否已经有实例在运行     //只运行一个实

转 C# 只允许运行一个实例

来源:http://blog.csdn.net/jin20000/article/details/3136791 互斥进程(程序), 简单点说,就是在系统中只能有该程序的一个实例运行. 现在很多软件都有这功能,如Maxthon 可以设置为"只允 许打开一个窗体",还有Bitcomet等. 我也是看到这些软件的这个功能才来研究这个问题的.  要实现程序的互斥,通常有三中方式,下面 用 C#  语言来实现: 实现方式一: 使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.C#实现如