标签: plinq

何时处置CancellationTokenSource?

这个班级CancellationTokenSource是一次性的.快速浏览Reflector证明KernelEvent了(很可能)非托管资源的使用.由于CancellationTokenSource没有终结器,如果我们不处理它,GC将不会这样做.

另一方面,如果您查看MSDN文章" 托管线程中的取消"中列出的示例,则只有一个代码段处置该令牌.

在代码中处理它的正确方法是什么?

  1. using如果您不等待它,则无法将启动并行任务的代码包装起来.只有在你不等的时候取消才有意义.
  2. 当然你可以ContinueWith通过Dispose电话添加任务,但这是要走的路吗?
  3. 那些可以取消同步的可取消的PLINQ查询呢,但最后只做一些事情?我们说吧.ForAll(x => Console.Write(x))
  4. 它可以重复使用吗?是否可以将相同的令牌用于多个调用,然后将其与主机组件一起处理,让我们说UI控件?

因为它没有类似于Reset清理IsCancelRequestedToken字段的方法,所以我认为它不可重复使用,因此每次启动任务(或PLINQ查询)时都应该创建一个新任务.这是真的吗?如果是,我的问题是Dispose在这些CancellationTokenSource案例中处理的正确和建议的策略是什么?

c# parallel-extensions plinq task-parallel-library c#-4.0

142
推荐指数
7
解决办法
4万
查看次数

Reactive Framework,PLINQ,TPL和Parallel Extensions如何相互关联?

至少从.NET 4.0发布以来,微软似乎已经付出了很多努力来支持并行和异步编程,而且似乎已经出现了很多API和库.特别是最近随处可见的以下花哨的名字:

  • 反应性框架,
  • PLINQ(并行LINQ),
  • TPL(任务并行库)和
  • 并行扩展.

现在它们似乎都是微软的产品,它们似乎都针对.NET的异步或并行编程场景.但目前尚不清楚它们实际上是什么以及它们如何相互关联.实际上有些可能是同一件事.

简而言之,任何人都可以直接记录什么是什么?

parallel-extensions plinq task-parallel-library system.reactive

66
推荐指数
2
解决办法
8003
查看次数

究竟什么是PLINQ?

PLINQ作为LINQ的扩展添加在.NET 4.0 Framework中.

  • 它是什么?
  • 它解决了什么问题?
  • 什么时候适当,什么时候不适合?

.net c# linq plinq

40
推荐指数
3
解决办法
2万
查看次数

AsParallel的最大并行度()

在使用时,Parallel.ForEach我们可以选择定义Parallel选项并设置Max Degree of Parallelism,如:

Parallel.ForEach(values, new ParallelOptions {MaxDegreeOfParallelism = number}, value = > {
    // Do Work
})
Run Code Online (Sandbox Code Playgroud)

但在做PLINQ时:

Tabel.AsEnumberable()
     .AsParallel()
     .Where(//Logic)
Run Code Online (Sandbox Code Playgroud)

我无法找到一种方法来设置MaxDegreeOfParallelism.我也在网上抬头,但没有找到任何东西.有没有人找到解决方法呢?任何帮助表示赞赏.

.net c# plinq task-parallel-library parallel.foreach

25
推荐指数
2
解决办法
2万
查看次数

如何依靠I/O大量正确地并行工作

我正在构建一个必须处理大量数据的控制台应用程序.

基本上,应用程序从数据库中获取引用.对于每个引用,解析文件的内容并进行一些更改.这些文件是HTML文件,并且该过程正在使用RegEx替换进行繁重的工作(查找引用并将它们转换为链接).然后将结果存储在文件系统中并发送到外部系统.

如果我按顺序恢复该过程:

var refs = GetReferencesFromDB(); // ~5000 Datarow returned
foreach(var ref in refs)
{
    var filePath = GetFilePath(ref); // This method looks up in a previously loaded file list
    var html = File.ReadAllText(filePath); // Read html locally, or from a network drive
    var convertedHtml = ParseHtml(html);
    File.WriteAllText(destinationFilePath); // Copy the result locally, or a network drive
    SendToWs(ref, convertedHtml);
}
Run Code Online (Sandbox Code Playgroud)

我的程序工作正常,但速度很慢.这就是为什么我想要并行化这个过程.

到现在为止,我做了一个简单的并行化添加AsParallel:

var refs = GetReferencesFromDB().AsParallel(); 
refs.ForAll(ref=>
{
    var filePath = GetFilePath(ref); 
    var html = File.ReadAllText(filePath); 
    var convertedHtml = …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading plinq task-parallel-library

22
推荐指数
2
解决办法
9944
查看次数

并行运行简单的LINQ查询

我对LINQ和PLINQ仍然很陌生.我通常只是List.BinarySearch在很多情况下使用循环,但我正试图摆脱那种心态.

public class Staff
{
  // ...
  public bool Matches(string searchString)
  {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

使用"普通"LINQ - 对不起,我不熟悉术语 - 我可以做到以下几点:

var matchedStaff = from s
                     in allStaff
                  where s.Matches(searchString)
                 select s;
Run Code Online (Sandbox Code Playgroud)

但我想并行执行此操作:

var matchedStaff = allStaff.AsParallel().Select(s => s.Matches(searchString));
Run Code Online (Sandbox Code Playgroud)

当我检查类型时matchedStaff,它是一个bools 的列表,这不是我想要的.

首先,我在这里做错了什么,其次,如何List<Staff>从这个查询中返回一个?

public List<Staff> Search(string searchString)
{
  return allStaff.AsParallel().Select(/* something */).AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)

回报IEnumerable<type>,而不是List<type>.

c# linq plinq

19
推荐指数
2
解决办法
3万
查看次数

在PLINQ中,.AsSequential()和.AsOrdered()之间有什么区别?

我似乎无法理解AsSequential和AsOrdered之间的区别.我已经在msdn上查找了每个文档以及在互联网上搜索示例,但我只是一个简单的鞋匠,我无法明确了解发生了什么.如果可能的话,有人可以解释你何时使用AsSequential和AsOrdered,并在必要时解释结果会有何不同?

c# plinq

19
推荐指数
1
解决办法
1958
查看次数

Parallel.ForEach是否需要AsParallel()

ParallelEnumerable有一个静态成员AsParallel.如果我有一个IEnumerable<T>并且想要使用Parallel.ForEach那意味着我应该一直使用AsParallel吗?

例如,这些都是正确的(其他一切都是平等的)吗?

没有AsParallel:

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
Run Code Online (Sandbox Code Playgroud)

还是用AsParallel

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
Run Code Online (Sandbox Code Playgroud)

.net-4.0 plinq task-parallel-library

18
推荐指数
1
解决办法
4240
查看次数

在所有Linq查询中尝试使用Plinq是否可以?

我读到,如果发现PLinq更贵,PLinq将自动使用非并行Linq.所以我想为什么不将PLinq用于所有事情(如果可能的话)并让运行时决定使用哪一个.

应用程序将部署到多核服务器,我可以开发更多代码来处理并行性.

使用plinq作为默认值的缺陷是什么?

c# linq .net-4.0 plinq task-parallel-library

16
推荐指数
1
解决办法
1125
查看次数

你在使用Parallel Extensions吗?

我希望这不是滥用stackoverflow; 最近我在Parallel Extensions上看到了一些很棒的问题,引起了我的兴趣.

我的问题:你使用的是Parallel Extensions,如果有的话,怎么样?

我的名字是Stephen Toub,我是微软的并行计算平台团队的成员.我们是负责Parallel Extensions的小组.我一直很想知道开发人员如何利用Parallel Extensions(例如Parallel.For,PLINQ,ConcurrentDictionary等),积极的体验,你曾经拥有的负面体验,对未来的特征要求等等.上.
如果您愿意分享此类信息,请在此处作为对此问题的回复,或通过电子邮件私下给我stoub at microsoft dot com.

我非常期待收到你的来信.

提前致谢!

.net parallel-processing task plinq task-parallel-library

16
推荐指数
1
解决办法
624
查看次数