C# 多用户操作不允许所请求的注册表访问权

来源:互联网 发布:火箭回收知乎 编辑:程序博客网 时间:2024/06/06 08:51

可能原因如下:并发操作,Connection用后没有关闭,或者因为DataReader连接独占连接。

解决方法:
           1 、修改几个关键页面或访问比较频繁的数据库访问操作,使用DataAdapter和DataSet来获取数据库数据,不要使用DataReader。
           2、 在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。
          3、 修改代码,把使用Connection对象的地方都在Close()后面加上Dispose()调用。
          95%是因为数据连接用完了不关闭

          我之前要求手下的程序员写数据库程序一律这个格式:

        try{
       conn.Open();
            } finally
         {
      conn.Close();
             }

 


           4、建议对数据库操作进行大的修改,建立自己的数据库操作代理类,继承System.IDisposable接口,强迫释放资源,这样就不会出现连接数量不够的问题了

          5、改变连接池同时最大连接数:添加“max pool size=300”在数据库连接字段
<appSettings>
    <add key="dsn"  value="server=(local);User ID=sa;Password=sa;database=GWPart;Enlist=true;Pooling=true;Max Pool Size = 5120;Min Pool Size=0; Connection Lifetime=30;packet size=1024"/>
  </appSettings>

 

转帖有关.NET连接池知识点
        大多数 ADO.NET 数据提供程序使用连接池,以提高围绕 Microsoft 断开连接的 .NET 结构构建的应用程序的性能。应用程序首先打开一个连接(或从连接池获得一个连接句柄),接着运行一个或多个查询,然后处理行集,最后将连接释放回连接池。如果没有连接池,这些应用程序将花费许多额外时间来打开和关闭连接。
          请记住,您需要监视和管理两个基本因素:每个池管理的连接数和连接池的数量。在一个有效的生产系统中,池的数量通常很少(1 到 10),而且,使用中的连接的总数也很少(少于 12 )有效的查询只用不到一秒钟的时间就可以完成,并断开连接。因此,即使有数百个客户同时访问您的 Web 站点,相对较少的几个连接常常足以处理整个负载。为了使您的应用程序有效地运行,您必须使连接资源处于自己的控制之下,并要监视池的状态,这样,在监视池发生溢出以及您的客户开始抱怨(或离开您的网站)之前您会收到某种警告。
      一个池中的默认连接数是 100.如果您尝试从池中打开 100 个以上的连接,ADO.NET 会使应用程序的连接请求排队等候,直到有空闲的连接。
       最后,请记住,ado.net 采用的方法与基于 COM 的 ADO 有所不同。Visual Basic .NET 完全改变了放弃对象的方式,并且不再确保 Connection 对象在停止作用时被关闭。请确保 SqlConnection 对象(或任何 Connection 对象)在停止作用之前被关闭。

原创粉丝点击