9得票2回答
应对海量文件的处理问题

我正在进行一个研究项目,其中包括索引大量文件(240k);它们主要是html、xml、doc、xls、zip、rar、pdf和文本文件,文件大小从几KB到超过100 MB不等。 将所有zip和rar文件解压后,我得到了总计一百万个文件。 我使用Visual Studio 2010、C#和....

9得票1回答
如何在TPL Dataflow中进行异步操作以获得最佳性能?

我编写了下面的方法来批量处理一个巨大的CSV文件。思路是将文件中的一块行读入内存,然后将这些行分成固定大小的批次。一旦我们得到分区,就将这些分区发送到服务器(同步或异步),这可能需要一段时间。 private static void BatchProcess(string filePath,...

8得票1回答
如何正确管理TPL Dataflow中的完成状态。

我创建了一个类似于网络爬虫的程序来生成我需要管理的1000多个 Web 服务的报告。为此,我创建了一个 TPL Dataflow Pipeline 来管理获取和处理数据。 我想象中的 Pipeline 程序看起来有点像这样(我的绘画技能很差 :D): 我已经创建了实现,并且一切都正常工作,...

8得票2回答
TPL DataFlow与BlockingCollection的比较

我知道BlockingCollection最适合使用在消费者/生产者模式中。但是,什么时候应该使用TPL DataFlow库中的ActionBlock呢? 我的初步理解是对于IO操作,应该使用BlockingCollection。而对于计算密集型操作,则最好使用ActionBlock。但我感...

8得票2回答
一个TPL Dataflow块下游如何获取由源产生的数据?

我正在使用TPL Dataflow处理图像。我接收到一个处理请求,从流中读取图像,应用多个转换,然后将结果图像写入另一个流: Request -> Stream -> Image -> Image ... -> Stream 为此,我使用块: BufferBlo...

8得票1回答
如何知道TPL Dataflow块是否繁忙?

TPL Dataflow块有`.InputCount`和`.OutputCount`属性。但是它现在可以在项目上执行,而且没有像` .Busy [Boolean]`这样的属性。那么有没有办法知道块是否正在运行,并且其中一个项目仍然存在? 更新: 让我解释一下我的问题。这张图片显示了我当前的...

8得票2回答
使用TPL Dataflow进行网络命令处理

我正在开发一个系统,涉及通过TCP网络连接接受命令,然后在执行这些命令后发送响应。这是相当基本的东西,但我希望支持以下几个要求: 1. 多个客户端可以同时连接并建立独立的会话。会话可以持续多长时间或者短暂,同一客户端IP可以建立多个并行会话(如果需要)。 2. 每个会话可以同时处理多个命令,...

8得票1回答
如何在捕获的ExecutionContext上运行异步委托

正如Stephen Toub在这篇文章中所解释的那样,当您向ActionBlock提交消息时,可以在调用ActionBlock.Post之前执行ExecutionContext.Capture,将同时包含消息和ExecutionContext的DTO传递到块中,然后在消息处理委托内使用Exec...

8得票2回答
如何限制通过整个Dataflow管道并发传递的项数?

我希望限制Dataflow管道中发布的项目数量。该数量取决于生产环境。这些对象(图像)消耗大量内存,因此我希望在管道的最后一个块完成其工作时再发布它们。 我尝试使用SemaphoreSlim来限制生产者并在管道的最后一个块中释放它。虽然它有效,但如果在过程中出现异常,程序将永久等待且无法拦截...

8得票1回答
定义 BoundedCapacity 会降低性能。

有没有办法通过TPL Dataflow节流来限制性能下降? 我有一个复杂的组件管道,并尝试限制所需的内存要求。我从多个文件并行读取,在管道中的组件可能会从这些文件的随机部分执行一些额外的读取操作,其余的组件则进行CPU绑定操作。 我将性能测试台简化为使用共同的测试方法进行这些测试。 pr...