C# 使用线程从文件中获取电子邮件
我有一个应用程序,可以读取文件并从中获取电子邮件。我使用线程运行我的应用程序,但我的应用程序的性能没有得到改善。。。我有什么问题 使用线程(需要54秒): 正常代码(需要54秒):C# 使用线程从文件中获取电子邮件,c#,multithreading,C#,Multithreading,我有一个应用程序,可以读取文件并从中获取电子邮件。我使用线程运行我的应用程序,但我的应用程序的性能没有得到改善。。。我有什么问题 使用线程(需要54秒): 正常代码(需要54秒): 单独使用线程并不能提高应用程序的速度。在这种情况下,在初始情况下,所有工作都由一个线程完成。在下一种情况下,第一个线程将启动一个线程来执行工作。但是您仍然只有一个线程处理,并且您的初始线程将等待处理完成。如果你想让它更快,你需要找到可以并行执行的部分。创建和启动线程是一项代价高昂的操作。每个正则表达式有一个正则表达式
单独使用线程并不能提高应用程序的速度。在这种情况下,在初始情况下,所有工作都由一个线程完成。在下一种情况下,第一个线程将启动一个线程来执行工作。但是您仍然只有一个线程处理,并且您的初始线程将等待处理完成。如果你想让它更快,你需要找到可以并行执行的部分。创建和启动线程是一项代价高昂的操作。每个正则表达式有一个正则表达式可能并不划算。调用RegEx的代价太低,因此需要额外的线程
从所花费的时间来看,您的磁盘读取可能会更加昂贵,因此线程可能带来的任何好处都消失了。您从磁盘读取文件的时间比正则表达式处理时间短。问题是您受到磁盘IO的约束,而不是计算资源的约束。当我删除正则表达式代码时,读取文件需要5秒。。我认为这不是磁盘读取<代码>StreamReader sr=新的StreamReader(@“D:\15.txt”);当我删除正则表达式代码时(!sr.EndOfStream){var line=sr.ReadLine();}读取文件需要5秒。。我认为这不是磁盘读取<代码>StreamReader sr=新的StreamReader(@“D:\15.txt”);当我删除正则表达式代码时(!sr.EndOfStream){var line=sr.ReadLine();}读取文件需要5秒。。我认为这不是磁盘读取<代码>StreamReader sr=新的StreamReader(@“D:\15.txt”);而(!sr.EndOfStream){var line=sr.ReadLine();}
StreamReader sr = new StreamReader(@"D:\15.txt");
Regex regx = new Regex(@"([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))");
while (!sr.EndOfStream)
{
var line = sr.ReadLine();
Thread th = new Thread(new ThreadStart(() => {
var mc = regx.Matches(line);
if (mc.Count != 0)
foreach (Match item in mc)
{
Console.WriteLine(item.Value);
}
}));
th.Start();
}
StreamReader sr = new StreamReader(@"D:\15.txt");
Regex regx = new Regex(@"([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))");
while (!sr.EndOfStream)
{
var line = sr.ReadLine();
var mc = regx.Matches(line);
if (mc.Count != 0)
foreach (Match item in mc)
{
Console.WriteLine(item.Value);
}
}