C# 在C中从多个web文件中读取第一行的有效方法#

C# 在C中从多个web文件中读取第一行的有效方法#,c#,web,C#,Web,有一个web服务器,它包含多个长文件(>500Kb),其中包含不同类别的新闻。我只需要获得每个类别的最新新闻,文件的第一行(通常

有一个web服务器,它包含多个长文件(>500Kb),其中包含不同类别的新闻。我只需要获得每个类别的最新新闻,文件的第一行(通常<1Kb,但可以更多),并使下载速度更快,因为连接速度慢,我的想法是逐行阅读,以便下载最少的数据量。目前我正在执行下面的代码,但下载完整文件所花的时间似乎没有多大改进

foreach(var newsType in newsTypes)
{
    var request = WebRequest.Create("http://www.xxxx.com/" + newsType) as HttpWebRequest;
    request.Timeout = 5000;
    using (var response = request.GetResponse() as HttpWebResponse)
    {
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            while (!reader.EndOfStream)
            {
                var fileRowCSV = reader.ReadLine();
                ...
                if (old-news) break;
                ...
        }
    }
}
是否有和设置我需要修改,使不是所有的文件得到传输? 我是否可以以某种方式重用一个可以读取其他文件的连接? 关于如何改进流程有什么想法吗


谢谢

我认为在.NET框架中没有内置的方法来实现这一点。但是,如果您希望简单地加快整个过程,那么可以(我认为相对容易)并行化外部
foreach
循环


或者,是一个MSDN示例,显示从web下载文件的进度。您应该能够使用该示例中的代码来完成您想要的任务:在每X字节之后,检查您是否访问了
旧新闻
,如果是,请取消下载。公平警告,这不仅仅是几行代码。

您正在下载整个文件(尽管只读取文件的第一行)。您需要一种方法来开始下载,但在到达第一行新行时停止。如果最终需要整个文件,那么您将希望从停止下载的地方继续下载。我不知道如何在不使用套接字的情况下在.NET中做到这一点(这将是一项艰巨的工作),但FreeDownloadManager(开源)做到了这一点,我认为是这样的。NET.NVM FreeDownloadManager不是。我知道新的行,我想要的行,都在文件的开头。我需要一种方法在请求中指定只下载一部分文件,如果需要更多,继续下载另一部分文件,但不知道如何使下载速度比下载完整文件快。我会给这个问题一天时间,看看是否有有用的东西。如果没有,则删除它并开始一个新问题,询问如何下载文件,直到新行开始。如果您还没有想到它:您肯定应该在服务器端异步执行此操作(而不是在提供每个页面的情况下)。换句话说,您的服务器应该定期(10、30、60分钟)检索最新新闻,并将当前文章保存到页面中。您的页面将不再依赖于外部服务器或检索新闻所涉及的等待。此外,如果您发现问题没有简单的解决方案,那么问题就不会那么大。如果连接速度快,并行化可以节省时间,但是如果连接速度慢,如果瓶颈是带宽,则并行化不会节省太多时间。看看这篇文章,他们似乎在玩弄缓冲区大小。想知道它是否有助于这样做:-reader=newstreamreader(response.GetResponseStream(),System.Text.Encoding.GetEncoding(1252),true,80)传输停止是否使用缓冲区小的StreamReader?