草庐IT

parallel-collections

全部标签

c# - Parallel.ForEach 可以导致 "Out Of Memory"异常,如果使用可枚举的大对象

我正在尝试将图像存储在数据库中的数据库迁移到数据库中指向硬盘驱动器上文件的记录。我正在尝试使用Parallel.ForEach加快进程usingthismethod查询出数据。但是,我注意到我得到了一个OutOfMemory异常(exception)。我知道Parallel.ForEach将查询一批可枚举以减轻开销成本,如果有一个用于间隔查询(因此如果您一次执行一堆查询而不是将它们间隔开,您的源更有可能将下一条记录缓存在内存中).问题是由于我返回的记录之一是一个1-4Mb字节数组,缓存导致整个地址空间用完(该程序必须在x86模式下运行,因为目标平台将是32位机)是否有任何方法可以禁用缓

c# - 从 Collection 到 List<T> 的最快转换

我想避免的事情:ManagementClassm=newManagementClass("Win32_LogicalDisk");ManagementObjectCollectionmanagementObjects=m.GetInstances();ListmanagementList=newList();foreach(ManagementObjectminmanagementObjects){managementList.Add(m);}有没有办法将该集合放入类似于以下内容的列表中:ListmanagementList=newList(collection_array);

c# - System.Collections.Generic.IEnumerable' 不包含 'ToList' 的任何定义

问题来了。我正在从ViewPage获取IEnumerable,当我尝试将其转换为List时,它显示如下错误:'System.Collections.Generic.IEnumerable'doesnotcontainadefinitionfor'ToList'andnoextensionmethod'ToList'acceptingafirstargumentoftype'System.Collections.Generic.IEnumerable'couldbefound(areyoumissingausingdirectiveoranassemblyreference?)这是我的C

c# - Parallel.ForEach 添加到列表

我正在尝试运行多个连接到远程站点(通过网络)并返回通用列表的函数。但我想同时运行它们。例如:publicstaticListSearch(stringtitle){//InitializeanewtemplisttoholdallsearchresultsListresults=newList();//LoopallproviderssimultaneouslyParallel.ForEach(Providers,currentProvider=>{ListtmpResults=currentProvider.SearchTitle((title));//Addresultsfromc

c# - 我应该使用 ThreadPools 还是 Task Parallel Library 来进行 IO 绑定(bind)操作

在我的一个类似聚合器的项目中,我从网络解析提要、播客等。如果我使用顺序方法,考虑到大量资源,处理所有资源需要相当长的时间(因为网络问题和类似问题);foreach(feedinfeeds){read_from_web(feed)parse(feed)}所以我想实现并发性,但无法决定是应该基本上使用ThreadPools来处理工作线程,还是仅仅依靠TPL来对其进行排序。ThreadPools肯定会通过工作线程为我处理工作,我会得到我期望的结果(在多核CPU环境中,其他核心也会被利用)。但我仍然想考虑TPL,因为它是推荐的方法,但我有点担心。首先,我知道TPL使用ThreadPools但增

c# - Parallel.ForEach 是否限制事件线程的数量?

给定这段代码:vararrayStrings=newstring[1000];Parallel.ForEach(arrayStrings,someString=>{DoSomething(someString);});所有1000个线程会几乎同时产生吗? 最佳答案 不,它不会启动1000个线程-是的,它会限制使用的线程数。ParallelExtensions使用适当数量的核心,具体取决于您实际拥有的数量和有多少已经处于忙碌状态。它为每个核心分配工作,然后使用一种称为工作窃取的技术让每个线程高效地处理自己的队列,并且只在真正需要时才需

c# - Parallel.ForEach 与 Task.Run 和 Task.WhenAll

使用Parallel.ForEach或Task.Run()异步启动一组任务有什么区别?版本1:Liststrings=newList{"s1","s2","s3"};Parallel.ForEach(strings,s=>{DoSomething(s);});版本2:Liststrings=newList{"s1","s2","s3"};ListTasks=newList();foreach(varsinstrings){Tasks.Add(Task.Run(()=>DoSomething(s)));}awaitTask.WhenAll(Tasks); 最佳

c# - 什么时候可以调用 GC.Collect?

一般的建议是您不应从您的代码中调用GC.Collect,但这条规则有哪些异常(exception)情况?我只能想到一些非常具体的情况,在这些情况下强制进行垃圾收集可能是有意义的。我想到的一个例子是服务,它每隔一段时间醒来,执行一些任务,然后长时间休眠。在这种情况下,强制收集以防止即将空闲的进程占用比需要更多的内存可能是个好主意。是否还有其他情况可以调用GC.Collect? 最佳答案 如果您有充分的理由相信一组重要的对象——尤其是那些您怀疑在第1代和第2代中的对象——现在有资格进行垃圾收集,并且现在是收集垃圾的合适时机性能影响小。一

c# - 如何将此 foreach 代码转换为 Parallel.ForEach?

我对Parallel.ForEach有点困惑。什么是Parallel.ForEach,它到底有什么作用?请不要引用任何MSDN链接。这是一个简单的例子:string[]lines=File.ReadAllLines(txtProxyListPath.Text);Listlist_lines=newList(lines);foreach(stringlineinlist_lines){//MyStuff}如何用Parallel.ForEach重写这个例子? 最佳答案 Foreach循环:Iterationstakesplacesequ

c# - "The Controls collection cannot be modified because the control contains code blocks"

我正在尝试创建一个简单的用户控件,它是一个slider。当我将AjaxToolkitSliderExtender添加到用户控件时,我得到这个(*&$#()@#error:ServerErrorin'/'Application.TheControlscollectioncannotbemodifiedbecausethecontrolcontainscodeblocks(i.e.``).Description:Anunhandledexceptionoccurredduringtheexecutionofthecurrentwebrequest.Pleasereviewthestackt