前两天把数据库服务器和应用服务器分开部署(原来iis和DB都放在一台服务器上),发现服务器的应用程序日志中密密麻麻的全是黄色的警告日志,打开看看,大多数都是说空引用异常等信息问题一:
这里我对抛出的空引用异常警告信息简单介绍一下:
我在用户登录的时候使用如下方法保存当前用户的UserName
HttpContext.Current.Session["UserName"]
然后在该用户的整个生命周期里都会使用这个Session
系统日志中抛出的警告信息中就是 在我使用这个Session的时候 使用了未被赋值的对象那么:
1、这个Session是在用户登录的时候被赋值的,以后使用的时候为什么会出问题,而且只是偶尔出问题,并且很有规律,都是在固定的某两个文件中出现,其它使用这个Session的地方多了,为什么都没有问题?
2、既然系统能捕获到这个异常(只是警告信息),但是为什么我的应用程序不会报错?(我没有随便使用Catch吃掉这个异常)问题二:
我在被提示的代码里加上Try..Catch来吃掉这些异常,目的是不想让Windows发现这个东西,因为我觉得如果系统在拼命的写这些日志会影响到服务器的性能
改完后发布,问题出来了,虽然系统提示的警告信息明显减少了,可是到下午3点左右,服务器的Cpu竟然被w3wp.exe进程占到了100%,而且一直持续,连着两天都出现这样的情况,于是今天早上我把发布的程序恢复到更新前的版本,到目前为止还没出现这种情况,虽然系统日志中的警告又开始铺天盖地的来,但是Cpu确是很正常那么:
1、是不是因为我加了try..Catch吃异常造成了某方面的死循环呢?
2、有没有人用过AQTime?我想用这个来跟踪一下到底是哪可能会出现问题,但是AQTime好像只能打开并跟踪一个URL,而造成Cpu出现100%的情况是因为大并发的时候才会出现,简单的说我想跟踪所有人的URL,但是不现实,因为所有人的并发访问在服务器上都在一个w3wp.exe进程里,或许可以跟踪服务器上那个w3wp.exe进程,然而AQTime又提示说不能把已经在...环境下运行的..附加到进程里,郁闷,有办法解决吗?谢谢
这里我对抛出的空引用异常警告信息简单介绍一下:
我在用户登录的时候使用如下方法保存当前用户的UserName
HttpContext.Current.Session["UserName"]
然后在该用户的整个生命周期里都会使用这个Session
系统日志中抛出的警告信息中就是 在我使用这个Session的时候 使用了未被赋值的对象那么:
1、这个Session是在用户登录的时候被赋值的,以后使用的时候为什么会出问题,而且只是偶尔出问题,并且很有规律,都是在固定的某两个文件中出现,其它使用这个Session的地方多了,为什么都没有问题?
2、既然系统能捕获到这个异常(只是警告信息),但是为什么我的应用程序不会报错?(我没有随便使用Catch吃掉这个异常)问题二:
我在被提示的代码里加上Try..Catch来吃掉这些异常,目的是不想让Windows发现这个东西,因为我觉得如果系统在拼命的写这些日志会影响到服务器的性能
改完后发布,问题出来了,虽然系统提示的警告信息明显减少了,可是到下午3点左右,服务器的Cpu竟然被w3wp.exe进程占到了100%,而且一直持续,连着两天都出现这样的情况,于是今天早上我把发布的程序恢复到更新前的版本,到目前为止还没出现这种情况,虽然系统日志中的警告又开始铺天盖地的来,但是Cpu确是很正常那么:
1、是不是因为我加了try..Catch吃异常造成了某方面的死循环呢?
2、有没有人用过AQTime?我想用这个来跟踪一下到底是哪可能会出现问题,但是AQTime好像只能打开并跟踪一个URL,而造成Cpu出现100%的情况是因为大并发的时候才会出现,简单的说我想跟踪所有人的URL,但是不现实,因为所有人的并发访问在服务器上都在一个w3wp.exe进程里,或许可以跟踪服务器上那个w3wp.exe进程,然而AQTime又提示说不能把已经在...环境下运行的..附加到进程里,郁闷,有办法解决吗?谢谢
解决方案 »
- 求正则表达式,高手进
- 关于XML的简单问题!
- 怎么能够获取PPT点击记录?
- 自己做的文件加密,但是不能加密,如何改
- 开始自学C#,一天争取帮人解决一个C#问题来提高。有问题尽管提!
- 异常详细信息: System.Data.SqlClient.SqlException: 过程或函数 'spCustomersRegister' 需要参数 '@Name',但未提供该参数。
- 关于C# 与三层结构的问题
- 修改xml的问题,很简单。各位帮帮忙
- 请教WatiN组件使用问题
- (300分求助微软专家),帮忙把这段代码改成操作PowerPoint的??不懂的UP有分
- 如何把字体的font存储到数据库中在读出来?解决马上给分
- 求助一个c#.net+SQL SERVER 的数据集配置问题
session要么过期了``
要么没赋值``
要么session["value"]中value得名字拼写错了``
在使用 Session 进行判断
if(Session["x"] != null)
{
//执行操作
}
不过,提示使用了为赋值的变量,应该不会出现在Session["x"]这行上吧。
使用了未被赋值的对象,一般在这种情况下会出现string x;
if(条件 )
{
x = "";
}
Response.Write(x);关于Try应该尽量减少使用,是比较占用资源的。
比如,IO读写,事先判断File.Exists(f),而不是进行try进行操作。
再比如,整除运算之前,进行判断分母是否为0,比使用Try高效得多。
对于可预料的错误,应先处理,而不是都放到Try里面去。对于W3wp占用100%,应当对程序进行优化处理,即使释放使用的对象实例等等。
谢谢孟子老大发帖子那天比较心烦意乱(不全都是工作上的事情)
现在看来感觉自己对帖子的阐述比较罗嗦(竟然有那么大的篇幅,很感谢各位能耐心的看完)其实现在总结起来就两个问题
1、系统日志中总是提示空引用异常的问题
我的解决方法是(像孟子老大说的那样)在使用session之前加了判断
if(Session["x"] != null){。}同时,加上了try{} catch{/*do nothing*/}
目的是(双保险)不想让系统写那么多无聊的日志2、程序发布以后,发现,系统的警告日志的确减少了,但是cpu总是一段时间之后会被w3wp进程占用到100%,因此我怀疑是因为胡乱添加了try{} catch{/*do nothing*/}之后造成了某个方法死循环可能有人会问,为什么try{} catch{/*do nothing*/}还能造成死循环的确有这种可能在某种while循环中,加入try{} catch{/*do nothing*/},而偏偏这个catch没有做任何处理,很有可能导致死循环,而我今天突然想起来好像在哪个while中加入了try{} catch{/*do nothing*/}因为那天心情不爽,为了快速解决日志的问题,所以在代码中胡乱的加了一些try{} catch{/*do nothing*/}而没做太多的思考,因此这个可能是造成cpu占用100%的根源所在现在还只是猜测,等周一修改代码并重新发布一下程序之后再观察一下,希望问题能解决。。
问题已经解决结论:
try catch 是绝对不能乱加的,占用资源不说,还很有可能造成不必要的麻烦例如死循环等问题(尤其是在Catch中不做任何处理的情况下)