访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资
源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。
连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。
用(推荐)
using(SqlConnection Conn=new SqlConnection(connstr))
{}//不必显示关闭
或
try{conn.Open();}
catch{}
finally{conn.Close();}
回收不了,即使你调用GC.Collect();因为.Net是根据对象大小级别来创建内存对象的分配空间的,即使你回收了哪个超大的字符串数组,.Net也认为你需要那么大的内存空间,也就是说你的程序就是那个大的级别,只要你分配过那么大的对象。
.Net内存管理的三级机制,这三级的大小就是根据你的对象的大小来确定的,你的对象个头越大,这三级的分别占用内存的空间也就越大,这是没法更改的。
所以建议你将那个大的字符串数组缩小,或者是使用本地资源,然后手动释放,看看Marshal类Top
建议使用缓存技术,<%@ OutputCache Duration="180" VaryByParam="None" %>
这样既可以减缓网站的压力,又能定时回收部分内存资源