我有一个大型列表(随着时间的推移而扩展)我需要检查其类型。这就是我目前的代码:
private string[] MIME = new string[] {
"audio/ogg - ogg",
"video/ogg - ogg",
"application/f4v - mp4",
"application/octet-stream - mp3",
"audio/aac - mp3",
"audio/mp3 - mp3",
"audio/mp4 - mp4",
"audio/mp4-latm - m4a",
"audio/mpeg - mp3",
"audio/mpeg3 - mp3",
"audio/x-mpeg - mp3",
"audio/x-ms-wma - wma",
"video/f4v - mp4",
"video/mp4 - mp4",
};
private string CheckType(string url) {
try {
HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(new Uri(url));
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0";
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webRequest.Timeout = 5000;
HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse();
long fileSize = webResponse.ContentLength;
foreach (string mime_entry in MIME) {
string sheader = webResponse.Headers.ToString();
string[] mime = mime_entry.Split(new string[] { " - " }, StringSplitOptions.RemoveEmptyEntries);
if (sheader.Contains(mime[0])) {
return mime[1] + " " + fileSize.ToString();
}
}
return "";
} catch (Exception ex) {
return "";
}
}
答案 0 :(得分:0)
是的,您可以通过仅发出HEAD请求来加快速度,因为毕竟您不需要使用响应正文。
是的,适度多线程是很有意义的 - 如果网址位于不同的服务器上,则服务器等待时间可以很容易并行化。使用同步队列,处理队列的一些工作线程将是一种简单的方法来平行化。你可以尝试一下线程的数量,我会尝试8个线程作为起点。
见上文。而且,您的MIME检查代码也不是最理想的。您可以使用Dictionary<string,string>
进行查找;在Headers
集合中,您应该只查看Content-Type,而不是整个标题集。