有过几年编程经验的人都知道,打开的资源用完之后是要关闭的。那么,所谓的“资源”都有哪些?你养成关闭这些“资源”的习惯了吗?
一般来说,显式打开的,不太容易忘记关闭,比如数据库连接。还有,文件类和流类虽然不用显式打开,但是我们在日常生活中已经养成了“打开文件”和“关闭文件”的习惯,翻译成代码,自然不是难事。但是其他的非显式打开的资源,就没有这么容易记起来,甚至,你都不知道他们是“资源”。
最近写了一个工具,利用HttpWebRequest多线程跟Web服务器交互。症状是数据传输非常慢,尽管只有一丁点数据量。从工具本身的代码入手,调试发现,竟然是GetResponse操作超时。在对Web服务器无可奈何的情况下,我只好死马当活马医,求助于万能的Google和Baidu了。当查到有人提到“Http默认并发数是2”,“HttpWebResponse需要关闭”的时候,我知道自己发现宝了。难道Intenet连接也是资源,答案是Yes。找到问题所在了,解决就很简单。
1、每次使用完Response之后,将其关闭:response.close();
2、修改Http的并发连接限制:System.Net.ServicePointManager.DefaultConnectionLimit = N;//N是你所用大的最大并发连接数,有人建议不要超过 1024。