Para la optimización del código .. como te mencioné desde un principio .. usando preg_match_all():
   Código PHP:
    <?
$url = "http://www.php.net/manual/es/";
$html = Implode("", File($url));
 
preg_match_all("/<a[[:space:]]+href[[:space:]]*=[[:space:]]*[\"']{0,1}([^\"'> ]+)/i",$html,$links_url,PREG_SET_ORDER);
 
preg_match_all("|>([^<]*)</a|i",$html,$links_descripcion,PREG_SET_ORDER);
 
for ($i=0;$i<count($links_url);$i++){
echo "<A HREF=\"".$links_url[$i][1]."\">".$links_descripcion[$i][1]."</A><BR>\n";
}
echo "<br>total links leidos: ".$i;
 
?>    
  En el ejemplo se leen 242 links extraidos entre HTML común ... lo procesó en:  0.0988030433655 segundos aprox. en mi PC "servidor" AMD K6-2 a 350MHz de la época xD... 
(abriendo el fichero .. con mi kka de conexion modem 56K acceso comuntado corriente: 5.03578197956 segundos aprox.) 
.. No es perfecta todavía la expresion regular .. habria q refinarla .. pero funciona bastan bien .. (por si acaso .. el código no es mio .. por lo menos las exp. regulares .. las saque de google .. aqui y allá xD). 
--------------------- 
Sobre lo de comprobar si un URL es valido o no .. se hace via sockets conectando por HTTP directo .. y leyendo el error q devuelve (un 500 o un 404 por ejemplo algo distinto al 200 creo q es el q fué correcta la conexión) .. 
Aquí tienes algunos: 
http://www.hotscripts.com/PHP/Script...Link_Checking/
(para q te fijes en el código) ... 
Un saludo,