C# 是否使用线程从网络下载文件
我需要根据关键字从网上下载大量文件。 我下面的步骤是C# 是否使用线程从网络下载文件,c#,.net,multithreading,C#,.net,Multithreading,我需要根据关键字从网上下载大量文件。 我下面的步骤是 使用刮削找出指向文件的链接 使用WebClient.DownloadData()下载字节[] 将arr保存到文件中 创建一个线程来下载每个文件以获得更好的性能是一个好主意。 任何建议。 谢谢 通常,服务器将从一个IP下载限制为2个连接。因此,如果所有的文件来自同一个服务器,多个线程可能没有多大帮助。 < P>你做了一个性能分析,表明你需要考虑线程吗?不那么你正在使用过早优化,你应该马上停止 您是否有多线程的经验,这样您就不太可能在锁定方面犯一
通常,服务器将从一个IP下载限制为2个连接。因此,如果所有的文件来自同一个服务器,多个线程可能没有多大帮助。 < P>你做了一个性能分析,表明你需要考虑线程吗?不那么你正在使用过早优化,你应该马上停止 您是否有多线程的经验,这样您就不太可能在锁定方面犯一些愚蠢的错误,或者,如果您确实犯了这样的错误,您将能够快速找到并修复它?不那你应该马上停下来
您可能不清楚调试多线程程序需要多长时间。这一时间可能完全超过了使用多线程所能节省的时间。通常是这样,但OP询问这是否是一种改进。他提到了“大量的文件”,这就解决了你的最后一点。但是,是的,他应该测量。
foreach (string each in arr)
{
Thread t = new Thread(
new ThreadStart(
delegate
{
string[] arr2 = each.Split(new string[] { "http://" }, StringSplitOptions.None);
string[] firstElem = arr2[1].Split(new string[] { " " }, StringSplitOptions.None);
string urlToDownload = @firstElem[0].Replace("\"", string.Empty);
string filName = Path.GetFileName(urlToDownload);
string dirName = DirInAppConfig();
DataRow row;
bool dataExistsInDtKwWithSameDownloadLinkAndFileName;
getRowForKwDownLinkFileName(urlToDownload, filName, out row, out dataExistsInDtKwWithSameDownloadLinkAndFileName);
downloadFile(Client, urlToDownload, dirName, filName, search, row);
}));
t.IsBackground = true;
t.Start();
t.Join();
}