是否有Mapper
使用多线程将一个列表映射到另一个列表?
var mappedItems = Mapper.Map<List<ItemDto>, ObservableCollection<Item>>(dtos);
显然,幕后Mapper
正在逐个处理ItemDto
到Item
。这个操作字面上要求&#34;拜托!做我多线程!&#34;。但是我无法找到这个选项。我正在寻找类似的东西:
Parallel.ForEach(items, item =>
{
});
我找不到任何可以帮助我的东西:/
答案 0 :(得分:2)
正如评论中已经说过的那样,您可能应该重新设计数据库逻辑,以便能够逐页查询数据,在服务器端或客户端使用一些过滤器。
但是,如果您仍然需要转换/转换某些数据,想要在后台执行此操作,并且能够并行化代码,则可以从TransformBlock
试用TPL Dataflow,如下所示:
public class ItemDto { }
public class Item { }
var transform = new TransformBlock<ItemDto, Item>(dto => new Item(),
// all cores can be used for processing
new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = Environment.ProcessorCount });
var dtoList = new List<ItemDto>();
foreach (var item in dtoList)
{
transform.Post(item);
}
如您所见,block可转换为IObservable<ItemDto>
,并且可以轻松地与UI一起使用:
IObservable<Item> observable = transform.AsObservable();