【问题标题】:What's the fastest way to check the file type of large list of URLs (and how to optimize my code)检查大型 URL 列表的文件类型的最快方法是什么(以及如何优化我的代码)
【发布时间】:2011-09-10 01:12:34
【问题描述】:

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

    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. 有没有更好的方法来做到这一点?

【问题讨论】:

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


    【解决方案1】:
    1. 是的,您可以通过仅发出 HEAD 请求来加快速度,因为毕竟您不会将响应正文用于任何事情。

    2. 是的,适度地多线程是很有意义的——如果 url 位于不同的服务器上,将有可以轻松并行化的服务器等待时间。使用同步队列和一些处理队列的工作线程将是一种并行化的简单方法。您可以尝试线程数,我会尝试 8 个线程作为起点。

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

    【讨论】:

    • 我已经问过 HEAD 是否比 GET 快。似乎是一样的。还有一些服务器不支持它。 stackoverflow.com/questions/7132967/…
    • HEAD 如果是动态页面,服务器处理时间可能不会更快,但对于静态资源,它应该更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多