Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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#_.net_Multithreading - Fatal编程技术网

C# 使用线程会节省时间吗?

C# 使用线程会节省时间吗?,c#,.net,multithreading,C#,.net,Multithreading,当用户将一个项目文件加载到我的应用程序中时,可能需要很长的时间—几十秒。我理解使用后台线程处理阻塞UI的内容的概念。但是,在这种情况下,用户除了查看进度消息之外,无需做任何事情—他们正在等待加载项目文件 我正在研究在不同线程之间划分不同项目元素的处理。然而,我一点也不清楚这是否真的值得改变。有些项目元素在创建时确实要花费更多的时间,但一般来说,复杂的项目元素数量很少,而简单的项目元素数量很多。处理包括创建一些绘图代码,以便元素可以显示在画布上 我理解线程之间时间切片的概念,但据我所知,所花费的总

当用户将一个项目文件加载到我的应用程序中时,可能需要很长的时间—几十秒。我理解使用后台线程处理阻塞UI的内容的概念。但是,在这种情况下,用户除了查看进度消息之外,无需做任何事情—他们正在等待加载项目文件

我正在研究在不同线程之间划分不同项目元素的处理。然而,我一点也不清楚这是否真的值得改变。有些项目元素在创建时确实要花费更多的时间,但一般来说,复杂的项目元素数量很少,而简单的项目元素数量很多。处理包括创建一些绘图代码,以便元素可以显示在画布上

我理解线程之间时间切片的概念,但据我所知,所花费的总时间没有改变,并且在使用线程时可能会有一些开销

我还了解到,对于多核处理器,如果线程分布在处理器之间,那么可能会发生一些真正的并发。对不起,我对线程的了解不够,不知道这是否是正确的描述。我不知道这是否容易安排。显然,单核处理器对用户没有帮助

更改代码以尝试它不是一项简单的任务,因此我将听取您的意见,以确定这是否值得尝试


谢谢。

如果耗时的任务可以分成更小的独立任务,那么在多个线程上运行这些任务会更快,因为您可以并行执行这些任务。如果您使用的是.NET4.0,我建议您查看内置的


线程最大的问题是能够将算法划分为更小的部分,这些部分可以并行和独立地执行。这样,您将在性能上获得净收益。但不幸的是,并不是所有的算法都可以并行化。在这种情况下,只需在后台线程上运行整个操作,以避免冻结主UI。这样做不会提高任何速度,应用程序的加载速度也不会更快,但至少用户不会在其窗口标题栏中看到“不响应”,并且您可以显示一些进度指示器。

如果耗时的任务可以分为更小的独立任务,那么在多个线程上运行这些任务会更快,因为您可以并行执行这些任务。如果您使用的是.NET4.0,我建议您查看内置的


线程最大的问题是能够将算法划分为更小的部分,这些部分可以并行和独立地执行。这样,您将在性能上获得净收益。但不幸的是,并不是所有的算法都可以并行化。在这种情况下,只需在后台线程上运行整个操作,以避免冻结主UI。这样做既不会提高速度,也不会加快应用程序的加载速度,但至少用户不会在窗口标题栏中看到“无响应”,并且您将能够显示一些进度指示器。

添加多线程并不能提高速度。如果多个线程最终竞争共享资源,那么程序很可能会运行得慢得多。

添加多线程并不能从本质上提高速度。如果多个线程最终竞争共享资源,程序很可能会运行得慢得多。

你说你有很多对象,有些小,有些大。因此,多线程可以帮助用户感觉事情进展得更快。此外,正如您所说,多核处理器可能会看到好处,只要您的处理器亲和力是默认值,它应该可以正常工作。大多数人今天可能会购买多核计算机,将来,你应该期望所有计算机都是多核的。

你说你有很多对象,一些小,一些大。因此,多线程可以帮助用户感觉事情进展得更快。此外,正如您所说,多核处理器可能会看到好处,只要您的处理器亲和力是默认值,它应该可以正常工作。大多数人今天可能会购买多核计算机,在未来,您应该期望所有计算机都是多核的。

通常,多线程加载过程不会节省时间,因为加载过程通常要求按特定顺序完成操作,在前一个操作完成之前,无法处理后续操作。这在很大程度上取决于您的实际加载过程。由于核心.net进程的原因,加载也可能需要时间。在这两种情况下,线程都不会产生显著差异

<> P>你必须考虑的是,任务中是否有明显的部分是彼此没有联系的。只有在这种情况下,它可能会更快,但只有到那时,您才会采用更快进程的速度 她已经过时了。如果在很大程度上增加线程,很有可能会降低处理速度,因为这段代码要付出代价


你可能会更好地考虑如果你能懒惰地加载项目的某些方面-在开始时可能不需要的任何东西都可能是推迟的可能性。甚至,根据处理结构,您是否可以在完成加载之前将控制权返回给用户,加载将在后台继续。这并没有使它变得更快,但确实给人一种更快的印象。

通常,多线程加载过程不会节省时间,因为该过程通常要求按特定顺序进行操作,在前一个方面完成之前,无法处理后一个方面。这在很大程度上取决于您的实际加载过程。由于核心.net进程的原因,加载也可能需要时间。在这两种情况下,线程都不会产生显著差异

<> P>你必须考虑的是,任务中是否有明显的部分是彼此没有联系的。只有在这种情况下,它可能会更快,但只有到那时,您才能将更快的进程的速度从时间中去掉。如果在很大程度上增加线程,很有可能会降低处理速度,因为这段代码要付出代价


你可能会更好地考虑如果你能懒惰地加载项目的某些方面-在开始时可能不需要的任何东西都可能是推迟的可能性。甚至,根据处理结构,您是否可以在完成加载之前将控制权返回给用户,加载将在后台继续。这并不会使它更快,但会给人更快的印象。

为什么不试试呢?将最大、最重的文件加载,将其线程化,然后看看会发生什么。在某些情况下,线程卸载速度可能会快得多,例如@TMN情况下,需要通过网络加载大量小型文件-通过高延迟网络建立连接以传输小型文件可能比传输文件数据花费更长的时间。在这种情况下,即使是单芯盒也会显示出很大的加速比

Rgds,
马丁为什么不试试呢?将最大、最重的文件加载,将其线程化,然后看看会发生什么。在某些情况下,线程卸载速度可能会快得多,例如@TMN情况下,需要通过网络加载大量小型文件-通过高延迟网络建立连接以传输小型文件可能比传输文件数据花费更长的时间。在这种情况下,即使是单芯盒也会显示出很大的加速比

Rgds,
Martin

我将分析代码,并研究如何提高其性能,首先保持单线程。我知道这不是你所要求的,但你可能想看看加速应用程序中项目加载时间的可能方法。这可能是一种比多线程更好、更简单的方法来解决这个问题。谢谢各位,我确实使用了一个分析器,并寻找方法使它更快。不幸的是,我认为我的改进已经接近尾声。从磁盘加载数据或将其处理为可用形式需要更长的时间吗?如果加载时间更长,线程将无法帮助您更快地加载。最好是让一个线程将数据加载到内存中,第二个线程在数据可用时对其进行处理。通过这种方式,可以在处理第一组数据时加载第二组数据,从而最大限度地缩短处理第一组和第二组数据之间的时间。我将分析代码,并研究如何提高其性能,首先保持单线程。我知道这不是你所要求的,但你可能想看看加速应用程序中项目加载时间的可能方法。这可能是一种比多线程更好、更简单的方法来解决这个问题。谢谢各位,我确实使用了一个分析器,并寻找方法使它更快。不幸的是,我认为我的改进已经接近尾声。从磁盘加载数据或将其处理为可用形式需要更长的时间吗?如果加载时间更长,线程将无法帮助您更快地加载。最好是让一个线程将数据加载到内存中,第二个线程在数据可用时对其进行处理。这样,可以在处理第一组数据时加载第二组数据,从而最大限度地缩短处理第一组和第二组数据之间的时间。只要有多个CPU/内核或一个超线程CPU,速度就会更快。@Pace:它实际上也可以在单核CPU上加快速度,如果您有阻塞磁盘I/O、网络流量等资源的线程,那么只要您有多个CPU/内核或一个超线程CPU,它就会更快。@Pace:它实际上可以加快 如果您的线程阻塞了磁盘I/O、网络流量等资源,那么单核CPU也会受到影响。