Webからhtmlを取得するのにこのような方法を取ってますが、何度も繰り返していると
「WebResponse res = req.GetResponse() as HttpWebResponse;」の箇所で何故か
”メモリが不足しています”というcatchできない例外が発生してしまいます。
メモリや不要リソースは意識してDispose()やnullしてるので、例外発生時でも余裕で700MBほど空いています。
一度に接続しているのは1本のみで、1本読み終わって次に移るようにしています。

色んなサイトのサンプル(@IT、Space仮面、緑単車等)で試して今は"as"でやってますが、
「HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;」を
「HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);」でやっていたときでも同じでした。

解決策のヒントだけでもおながいします。

// 最低限で書きましたが、実際にはそれぞれの処理でtry&catchしてます。
private void gethtml(string url, ArrayList htmlbuff) {
  ArrayList txt = new ArrayList();
  HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
  webreq.KeepAlive = true;
  webreq.Timeout = 30 * 1000;
  WebResponse res = req.GetResponse() as HttpWebResponse;
  System.IO.StreamReader rd = new StreamReader(res.GetResponseStream(),
              System.Text.Encoding.GetEncoding("euc-jp"));
  while(true) {
    string str = rd.ReadLine();
    if(str == null) break;
    htmlbuff.Add(str);
  }
  rd.Close();
  res.Close();
}