检查大型URL列表的文件类型(以及如何优化我的代码)的最快方法是什么?

时间:2011-09-09 17:08:08

标签: .net http network-programming c#-2.0

我有一个大型列表(随着时间的推移而扩展)我需要检查其类型。这就是我目前的代码:

    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 "";
        }
    }
  1. 我可以更快地提出要求吗?
  2. 我可以以某种方式使用多线程来更快地迭代列表(如果其中一个线程由于http响应而停止了吗?)
  3. 有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

  1. 是的,您可以通过仅发出HEAD请求来加快速度,因为毕竟您不需要使用响应正文。

  2. 是的,适度多线程是很有意义的 - 如果网址位于不同的服务器上,则服务器等待时间可以很容易并行化。使用同步队列,处理队列的一些工作线程将是一种简单的方法来平行化。你可以尝试一下线程的数量,我会尝试8个线程作为起点。

  3. 见上文。而且,您的MIME检查代码也不是最理想的。您可以使用Dictionary<string,string>进行查找;在Headers集合中,您应该只查看Content-Type,而不是整个标题集。