草庐IT

parallel-collections

全部标签

c# - Parallel.Foreach + yield 返回?

我想像这样使用并行循环处理一些东西:publicvoidFillLogs(IEnumerablecomputers){Parallel.ForEach(computers,cpt=>{cpt.Logs=cpt.GetRawLogs().ToList();});}好的,它工作正常。但是,如果我希望FillLogs方法返回一个IEnumerable怎么办?publicIEnumerableFillLogs(IEnumerablecomputers){Parallel.ForEach(computers,cpt=>{cpt.Logs=cpt.GetRawLogs().ToList();yie

c# - 为什么 C# 的 System.Collections 库中没有 ReadOnlyList<T> 类?

阅读有关在C#中创建只读原始向量的问题(基本上,您不能这样做),publicreadonlyint[]Vector=newint[]{1,2,3,4,5};//Youcanstillchangesvalues我了解了ReadOnlyCollectionBase。这是对象容器的基类,允许访问但不能修改它们的位置。甚至MicrosoftDocs中也有示例。ReadOnlyCollectionBaseClass-MicrosoftDocs我稍微修改了示例以使用任何类型:publicclassReadOnlyList:ReadOnlyCollectionBase{publicReadOnlyL

c# - 我是否必须包含所有 System.Collections.Immutable 依赖项?

我刚从(旧的)Microsoft.Bcl.ImmutableNuGet包切换到System.Collections.Immutable并惊讶地发现我的项目中有所有这些新的包依赖项:System.CollectionsSystem.Diagnostics.DebugSystem.GlobalizationSystem.LinqSystem.Resources.ResourceManagerSystem.RuntimeSystem.Runtime.ExtensionsSystem.Threading它们被列为NuGet包的依赖项,因此它们有权存在,但它们显然也已经安装在我的PC和我的目标环

c# - 在 Visual Studio 2012 中打开源文件时出现错误 "oldIndex must be a valid index in the Children collection"

我偶尔会在VisualStudio2012中收到带有以下错误的模态弹出窗口:oldIndexmustbeavalidindexintheChildrencollectionParametername:oldIndexActualvaluewas-1.我发现该错误的唯一引用是在thisResharperbugtrackingthread中,但我认为它与Resharper无关。在我的例子中,它似乎是在我开始调试之后发生的,并且由于某种原因调试器突然无法找到源文件,甚至在“进入”时也找不到。尝试手动打开它们失败,调试期间没有任何消息,我停止调试后出现上述消息。我(还)无法始终如一地重现这一点

c# - "SqlConnection does not support parallel transactions"什么时候发生?

我有很多相当有效的代码已经在这里好几个月了,今天我看到记录了以下异常:System.InvalidOperationExceptionSqlConnectiondoesnotsupportparalleltransactions.atSystem.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLeveliso,StringtransactionName)atSystem.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLeveliso,St

c# - System.Collections 是 "namespace of the System namespace"吗?

好的,所以我一直在阅读一本关于C#和.NET的书,同时学习DateTime结构和以下代码:DateTimedt=newDateTime(2015,10,17);我问自己“为什么我不必通过编写usingSystem.DateTime在顶部引用它”?所以我意识到,由于DateTime是一个结构,并且“using”关键字用于引用类型(类型是指集合{类、接口(interface)、结构、枚举、委托(delegate)}中的成员的通用术语),在特定命名空间中定义(在本例中,DateTime是来自系统命名空间的类型结构)。但我注意到在我的文件的顶部,找到了以下using指令(当我创建我的C#控制台

c# - Task.WaitAll 方法与 Parallel.Invoke 方法

我有示例代码来比较并行方法和任务方法的处理时间。本实验的目的是了解它们的工作原理。所以我的问题是:为什么Parallel比Task工作得更快?我的结果是否意味着我应该使用Parallel而不是Task?我应该在哪里使用Task和Parallel?与并行相比,使用任务有什么好处?Task是否只是ThreadPool.QueueUserWorkItem方法的包装?publicTaskSomeLongOperation(){returnTask.Delay(3000);}staticvoidMain(string[]args){Programp=newProgram();Listtasks=

c# - 使用 GC.Collect() 是正确的; GC.WaitForPendingFinalizers();?

我开始审查项目中的一些代码并发现了类似这样的内容:GC.Collect();GC.WaitForPendingFinalizers();这些线条通常出现在旨在提高效率的理由下破坏对象的方法上。我发表了以下评论:在销毁每个对象时显式调用垃圾回收会降低性能,因为这样做没有考虑到CLR性能是否绝对必要。按此顺序调用这些指令会导致每个对象仅在其他对象正在完成时才被销毁。因此,一个可以独立销毁的对象必须在没有真正必要的情况下等待另一个对象的销毁。它会产生死锁(参见:thisquestion)1、2和3是真的吗?你能提供一些引用来支持你的答案吗?虽然我几乎可以肯定我的言论,但我需要在我的论点中说清

c# - AsParallel.ForAll 与 Parallel.ForEach

下面的代码片段之间有什么区别吗?如果是,是什么?myList.AsParallel().ForAll(i=>{/*DOSOMETHING*/});和Parallel.ForEach(mylist,i=>{/*DOSOMETHING*/});主线程会等待所有子线程完成吗?在MVC应用程序中,如果我在我的Controller操作中进行并行处理,那么在主线程完成后子线程会发生什么。它们会被中止还是会在主线程完成后完成? 最佳答案 Parallel.ForEach()正是为这种代码设计的。另一方面,ForAll()旨在用于(可能很复杂的)P

c# - Task.Factory.StartNew 与 Parallel.Invoke

在我的应用程序中,我并行执行了几十到几百个操作(这些操作没有返回值)。哪种方法是最佳的:在foreach循环中使用Task.Factory.StartNew迭代Action数组(Action[])Task.Factory.StartNew(()=>someAction());使用Parallel类,其中actions是Action数组(Action[])Parallel.Invoke(actions);这两种方法是否等效?对性能有影响吗?编辑我已经执行了一些性能测试,在我的机器上(每个2个CPU2个内核)结果似乎非常相似。我不确定它在1个CPU等其他机器上会是什么样子。我也不确定(不知