一个由于数据库并发引起的错误,开发环境里一切都正常、运行环境里不稳定、发生莫名奇妙的错误
2009-09-24 13:42
573 查看
前些日子在开发项目过程中发生了一个奇怪的问题:
程序运行在我们自己的开发环境里都正常,不会出现错误,而且不只是我一个人的电脑,
是接近10个项目组开发人员的电脑上都是正常的,而且运行多久都不会出错,大家有接近
10个人都在并发访问数据库,都没出现异常。
当后台管理程序同时运行,并发管理,也不会出现错误,比较奇怪的,发布到 WEB服务
器上,运行接近1天后程序就会发生错误,而且刚部署的时候,程序运行都正常,错误页面
如下:
有些蹊跷的是,我几乎不用DataReader,怎么会报这个错误呢?想了一两天都没
想明白是怎么回事。
过了一周我才想起来,很早以前,我改进设计模式、按我们以前的同事的要求,把
数据库联接进行了优化,做了单实例,唉,原来是按同事的要求作了单实例后,出
现了并发问题了,因为发布到服务器上,是几十个人同时使用,在自己的开发环境
里,单独用后台管理端是一个人用,单实例都不会出现错误。
惹事生非的单实例代码如下:
Code
1
//------------------------------------------------------------
2
// All Rights Reserved , Copyright (C) 2009 , Jirisoft , Ltd.
3
//------------------------------------------------------------
4
5
using System;
6
using System.Reflection;
7
using System.Configuration;
8
9
namespace DotNet.Common.DbUtilities
10
{
11
using DotNet.Common.Utilities;
12
13
/**//// <summary>
14
/// DbHelperFactory
15
/// 数据库服务工厂。
16
///
17
/// 修改纪录
18
///
19
/// 2009.07.23 版本:1.2 JiRiGaLa 每次都获取一个新的数据库连接,解决并发错误问题。
20
/// 2008.09.23 版本:1.1 JiRiGaLa 优化改进为单实例模式。
21
/// 2008.08.26 版本:1.0 JiRiGaLa 创建数据库服务工厂。
22
///
23
/// 版本:1.2
24
///
25
/// <author>
26
/// <name>JiRiGaLa</name>
27
/// <date>2009.07.23</date>
28
/// </author>
29
/// </summary>
30
public class DbHelperFactory
31
{
32
private static readonly string DbHelperAssmely = BaseConfiguration.Instance.DbHelperAssmely;
33
private static readonly string DbHelperClass = BaseConfiguration.Instance.DbHelperClass;
34
public static readonly string DbConnectionString = BaseConfiguration.Instance.DbConnectionString;
35
36
private static IDbHelper helper;
37
private static Object locker = new Object();
38
39
public static IDbHelper GetHelper()
40
{
41
if (helper == null)
42
{
43
lock (locker)
44
{
45
if (helper == null)
46
{
47
helper = (IDbHelper)Assembly.Load(DbHelperAssmely).CreateInstance(DbHelperClass, true);
48
}
49
}
50
}
51
return helper;
52
}
53
}
54
}
看看程序,想想并发、再看看错误信息,心里全部明白了,都是单实例惹得麻烦。
开发环境里有些错误是无法发现的,换个环境,换个角度测试,问题就暴露出来了。
程序不在于多,也不在于高超,只要运行稳定,维护方便,经得起考验才是好程序,
土一点儿笨一点儿并不是系统架构的关键问题,我们的客户大多都是非IT专业的,
他们图的是运行稳定高效的系统,他们并不关心技术的细节,懂技术的也不大愿意
花钱购买服务,自己折腾,自己开发了。
C:产品导读:
白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
疯狂.NET架构通用权限后台管理工具演示版2.0下载
疯狂.NET 通用权限设计 C/S后台管理,B/S前台调用源码样例程序源码下载之 --- 操作权限
疯狂.NET 通用权限设计 C/S后台管理,B/S前台调用源码样例程序源码下载之 --- 角色权限
疯狂.NET 通用权限设计 C/S后台管理,B/S前台调用源码样例程序源码下载之 --- 数据集权限
将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。
程序运行在我们自己的开发环境里都正常,不会出现错误,而且不只是我一个人的电脑,
是接近10个项目组开发人员的电脑上都是正常的,而且运行多久都不会出错,大家有接近
10个人都在并发访问数据库,都没出现异常。
当后台管理程序同时运行,并发管理,也不会出现错误,比较奇怪的,发布到 WEB服务
器上,运行接近1天后程序就会发生错误,而且刚部署的时候,程序运行都正常,错误页面
如下:
有些蹊跷的是,我几乎不用DataReader,怎么会报这个错误呢?想了一两天都没
想明白是怎么回事。
过了一周我才想起来,很早以前,我改进设计模式、按我们以前的同事的要求,把
数据库联接进行了优化,做了单实例,唉,原来是按同事的要求作了单实例后,出
现了并发问题了,因为发布到服务器上,是几十个人同时使用,在自己的开发环境
里,单独用后台管理端是一个人用,单实例都不会出现错误。
惹事生非的单实例代码如下:
Code
1
//------------------------------------------------------------
2
// All Rights Reserved , Copyright (C) 2009 , Jirisoft , Ltd.
3
//------------------------------------------------------------
4
5
using System;
6
using System.Reflection;
7
using System.Configuration;
8
9
namespace DotNet.Common.DbUtilities
10
{
11
using DotNet.Common.Utilities;
12
13
/**//// <summary>
14
/// DbHelperFactory
15
/// 数据库服务工厂。
16
///
17
/// 修改纪录
18
///
19
/// 2009.07.23 版本:1.2 JiRiGaLa 每次都获取一个新的数据库连接,解决并发错误问题。
20
/// 2008.09.23 版本:1.1 JiRiGaLa 优化改进为单实例模式。
21
/// 2008.08.26 版本:1.0 JiRiGaLa 创建数据库服务工厂。
22
///
23
/// 版本:1.2
24
///
25
/// <author>
26
/// <name>JiRiGaLa</name>
27
/// <date>2009.07.23</date>
28
/// </author>
29
/// </summary>
30
public class DbHelperFactory
31
{
32
private static readonly string DbHelperAssmely = BaseConfiguration.Instance.DbHelperAssmely;
33
private static readonly string DbHelperClass = BaseConfiguration.Instance.DbHelperClass;
34
public static readonly string DbConnectionString = BaseConfiguration.Instance.DbConnectionString;
35
36
private static IDbHelper helper;
37
private static Object locker = new Object();
38
39
public static IDbHelper GetHelper()
40
{
41
if (helper == null)
42
{
43
lock (locker)
44
{
45
if (helper == null)
46
{
47
helper = (IDbHelper)Assembly.Load(DbHelperAssmely).CreateInstance(DbHelperClass, true);
48
}
49
}
50
}
51
return helper;
52
}
53
}
54
}
看看程序,想想并发、再看看错误信息,心里全部明白了,都是单实例惹得麻烦。
开发环境里有些错误是无法发现的,换个环境,换个角度测试,问题就暴露出来了。
程序不在于多,也不在于高超,只要运行稳定,维护方便,经得起考验才是好程序,
土一点儿笨一点儿并不是系统架构的关键问题,我们的客户大多都是非IT专业的,
他们图的是运行稳定高效的系统,他们并不关心技术的细节,懂技术的也不大愿意
花钱购买服务,自己折腾,自己开发了。
C:产品导读:
白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
疯狂.NET架构通用权限后台管理工具演示版2.0下载
疯狂.NET 通用权限设计 C/S后台管理,B/S前台调用源码样例程序源码下载之 --- 操作权限
疯狂.NET 通用权限设计 C/S后台管理,B/S前台调用源码样例程序源码下载之 --- 角色权限
疯狂.NET 通用权限设计 C/S后台管理,B/S前台调用源码样例程序源码下载之 --- 数据集权限
将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。
相关文章推荐
- 一个由于数据库并发引起的错误,开发环境里一切都正常、运行环境里不稳定、发生莫名奇妙的错误
- 一个由于数据库并发引起的错误,开发环境里一切都正常、运行环境里不稳定、发生莫名奇妙的错误
- 一个由于数据库并发引起的错误,开发环境里一切都正常、运行环境里不稳定、发生莫名奇妙的错误
- 一个由于数据库并发引起的错误,开发环境里一切都正常、运行环境里不稳定、发生莫名奇妙的错误
- Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是
- 完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错我的开发环境是Win7旗舰64位+VS2003.Net,经常卡pdb错误,文末给出一个完美的解决
- 数据库表表面上存在索引和防错机制,然而一个简单的查询就会耗费很长时间。Web应用程序或许在开发环境中运行良好,但在产品环境中表现同样糟糕。如果你是个数据库管理员,你很有可能已经在某个阶段遇到上述情况。
- 当一个数据库插入事务由于错误被回滚时,被插入表中标识字段的值该发生怎么样的变化?
- ubuntu 下搭建一个python3的虚拟环境(用于django配合postgresql数据库开发)
- 一个hql 关键字member(非mysql)引起的 vo 数据 保存数据库错误
- VC2005程序的一个运行错误 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
- Delphi 开发时运行出现 程序连接数据库错误 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
- VC2005程序的一个运行错误“由于应用程序的配置不正确,应用程序未能启动,重新安装...”
- thinkphp——模板标签中include,由于疏忽发生了一个难以发现的错误
- 什么是IIS,一个完整的.NET运行环境(针对web;不是开发环境)需要哪些软件或配置
- 实验:基本的系统安全控制 实验环境 某公司新增了一台企业级服务器,已安装运行RHEL 6操作系统,由系统运维部、软件开发部、技术服务部共同使用。由于用户数量众多,且使用时间不固定,要求针对账号和
- 新项目开发及运行环境配置-nodejs前台+java后台+postgresql数据库+nginx+tomcat
- 【iOS-cocos2d-X 游戏开发之三】Mac下配置Android NDK环境并搭建Cocos2d-x环境并Eclipse正常编译运行Cocos2dX自带TestsDemo项目!
- 解决VC2005程序的一个运行错误“由于应用程序的配置不正确,应用程序未能启动"
- .Net 1.1/.Net 2.0共存主机引起的.Net 2.0程序无法正常运行的错误。[转]