数据库服务器挂了,程序出错。后来数据库服务器搞好了,程序还是跑不起来。后来研究了一番,吧IIS里的程序池回收一下就ok了。请问大神们,谁能给讲解一下。
这个问题很难说,在你程序出错后如果代码写的不够严谨可能会导致各种问题,从最简单的连接未回收到outofmemory等。iis回收相当于重启应用程序,当然可以在短时间内掩盖这些问题,这个和看病多喝水电脑出问题重装一个道理。
归根结底的意思是还是程序上对错误的处理不够严谨。是不是在连接数据库的时候出现异常的时候应该将SqlConnection对象做Dispose。
IIS里应用程序池回收的时候,应该就是做了Dispose吧
@土墙: 这种实现IDisposeable接口的对象绝大部分都需要在使用完进行回收,一般场景下用using套起来即可,connection对象会在dispose方法中判定是回连接池还是真的释放连接。
应用程序池回收就是一个hard reset,全部重启,和dispose没太大关系。
每来一个请求后->IIS 创建work->work 创建 sql 连接;
现在数据库挂了,你设想一下在工作中死掉和非工作中无法访问的。
工作中死掉的,要释放掉取决于客户端超时;非工作中死掉的,正常默认超时时间也很长;
因此请求稍微多一点,work池很快就满载了,只有随着一个个缓慢超时释放出来,才会有资源。
池的意义就是在于用有限对待相对的无限,但池满则无法“进水”