Tag: plinq

以下PLINQ代码没有任何改进

我没有看到使用以下代码处理速度的任何改进: IEnumerable sortedQuotes = (from x in unsortedQuotes.AsParallel() orderby (x.DateTimeTicks) select x); 顺序版本: IEnumerable sortedQuotes = (from x in unsortedQuotes orderby (x.DateTimeTicks) select x); 我在这里错过了什么吗? 我将源集合中的项目数量从数千个改为数千万个,并且没有大小显示并行版本即将发布。 任何提示赞赏。 顺便说一句,如果有人知道更快速的排序方式(给定我指示的项目变量类型(包含项目在集合中排序的长DateTimeTicks),这也是值得欣赏的。 编辑:“有效排序” – >尽快。 谢谢

比较i4o与PLINQ的较大集合

对于有i4o或PLINQ经验的人,我有一个问题。 我有一个需要查询的大对象集合(大约400K)。 逻辑非常简单明了。 例如,有一个Person对象的集合,我需要找到匹配相同firstName,lastName,datebirth或FirstName / lastname的第一个首字母等的人。这只是一个使用LINQ to Object的耗时过程。 我想知道i4o (http://www.codeplex.com/i4o ) 或PLINQ可以帮助提高查询性能。 哪一个更好? 如果那里有任何方法。 谢谢!

使C#ParallelEnumerable.OrderBy稳定排序

我正在使用OrderBy并行地按整数ID排序对象列表。 我有一些具有相同id的对象,需要排序才能保持稳定。 根据微软的文档 ,并行化的OrderBy并不稳定,但有一种实现方法可以使其稳定。 但是,我找不到这样的例子。 var list = new List() { new pair(“a”, 1), new pair(“b”, 1), new pair(“c”, 2), new pair(“d”, 3), new pair(“e”, 4) }; var newList = list.AsParallel().WithDegreeOfParallelism(4).OrderBy(p => p.order); private class pair { private String name; public int order; public pair (String name, int order) { this.name = name; this.order = […]

我们可以使用Parallel.ForEach()将新元素添加到列表中吗?

我的代码做的很简单 列表已经有元素。 我在列表中有大约25000个元素(我希望有更多元素),每个元素都很小(DateTime)。 List newList = new List(); Parallel.ForEach(list, l => newlist.Add(new DateTime(l.Ticks + 5000))); 也就是说,基于每个元素,我正在创建新元素并将它们添加到不同的列表中。 但是,这似乎不是一个好的编程方法。 我有时会遇到这种exception,但不是每次都这样。 IndexOutOfRangeException : {“Index was outside the bounds of the array.”} 我们可以使用Parallel.ForEach()将元素添加到列表中吗? 如果是,为什么我会遇到错误? 如果不是,为什么?

使用Parallel Linq Extensions结合两个序列,如何才能首先产生最快的结果?

假设我有两个序列返回整数1到5。 第一个返回1,2和3非常快,但4和5每个需要200毫秒。 public static IEnumerable FastFirst() { for (int i = 1; i 3) Thread.Sleep(200); yield return i; } } 第二个返回1,2和3,延迟时间为200ms,但快速返回4和5。 public static IEnumerable SlowFirst() { for (int i = 1; i < 6; i++) { if (i < 4) Thread.Sleep(200); yield return i; } } 联合这两个序列只给出数字1到5。 FastFirst().Union(SlowFirst()); 我不能保证两种方法中的哪一种在什么时候有延迟,所以执行的顺序不能保证为我提供解决方案。 因此,我想并行化联盟,以便最小化我的例子中的(人为的)延迟。 一个真实场景:我有一个返回一些实体的缓存,以及一个返回所有实体的数据源。 我希望能够从一个方法返回一个迭代器,该方法将请求内部并行化到缓存和数据源,以便缓存的结果尽可能快地生成。 注1:我意识到这仍然在浪费CPU周期; 我不是在问我如何防止序列迭代它们的慢元素,我怎么能尽可能快地将它们联合起来。 更新1:我已经定制了achitaka-san对接受多个生成器的响应,并使用ContinueWhenAll将BlockingCollection的CompleteAdding设置为一次。 […]

是否可以使用plinq ForAll批量插入数据库?

我这样做: entities.AsParallel().ForAll(o => repository.Insert(o)); 这很好,我会有更多的表现吗?

并行运行简单的LINQ查询

我仍然是LINQ和PLINQ的新手。 在很多情况下,我通常只使用循环和List.BinarySearch ,但我正试图摆脱那种心态。 public class Staff { // … public bool Matches(string searchString) { // … } } 使用“普通”LINQ – 对不起,我不熟悉术语 – 我可以做以下事情: var matchedStaff = from s in allStaff where s.Matches(searchString) select s; 但我想并行执行此操作: var matchedStaff = allStaff.AsParallel().Select(s => s.Matches(searchString)); 当我检查matchedStaff的类型时,它是bool的列表,这不是我想要的。 首先,我在这里做错了什么,其次,如何从这个查询中返回List ? public List Search(string searchString) { return allStaff.AsParallel().Select(/* something */).AsEnumerable(); } 返回IEnumerable […]

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

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

LINQ之后的下一个重大事项是什么?

当它还处于测试版时,我开始使用LINQ(语言集成查询),更具体地说是Microsoft .NET LINQ Preview(2006年5月)。 差不多4年了,我们在很多项目中使用LINQ来完成最多样化的任务。 我甚至根据LINQ写了我的最后一个大学项目。 你看我喜欢它。 LINQ以及最近的PLINQ(并行LINQ)在提高编程能力和减少代码行数方面为我们的工作提供了极大的推动力,使我们能够获得更具表现力和可读性的代码。 我一直在想LINQ之后C#的下一个重大语言改进。 我知道有一些突出的语言function作为代码合同等,但没有任何影响LINQ。 您认为下一件大事是什么?

使用TPL的Parallel.ForEach时跟踪进度

跟踪以下进度的最佳方式是什么? long total = Products.LongCount(); long current = 0; double Progress = 0.0; Parallel.ForEach(Products, product => { try { var price = GetPrice(SystemAccount, product); SavePrice(product,price); } finally { Interlocked.Decrement(ref this.current); }}); 我想将进度变量从0.0更新为1.0(当前/总)但我不想使用会对并行性产生负面影响的任何内容。