Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用线程从文件中获取电子邮件_C#_Multithreading - Fatal编程技术网

C# 使用线程从文件中获取电子邮件

C# 使用线程从文件中获取电子邮件,c#,multithreading,C#,Multithreading,我有一个应用程序,可以读取文件并从中获取电子邮件。我使用线程运行我的应用程序,但我的应用程序的性能没有得到改善。。。我有什么问题 使用线程(需要54秒): 正常代码(需要54秒): 单独使用线程并不能提高应用程序的速度。在这种情况下,在初始情况下,所有工作都由一个线程完成。在下一种情况下,第一个线程将启动一个线程来执行工作。但是您仍然只有一个线程处理,并且您的初始线程将等待处理完成。如果你想让它更快,你需要找到可以并行执行的部分。创建和启动线程是一项代价高昂的操作。每个正则表达式有一个正则表达式

我有一个应用程序,可以读取文件并从中获取电子邮件。我使用线程运行我的应用程序,但我的应用程序的性能没有得到改善。。。我有什么问题

使用线程(需要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);
        }
}