首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumerable PLINQ产量

IEnumerable PLINQ产量
EN

Stack Overflow用户
提问于 2012-06-02 03:40:20
回答 2查看 395关注 0票数 0

我有一个返回IEnumerable的函数,它通过MAPI迭代收件箱中的对象,但它相对较慢,所以我将创建一个连接池,并以多线程的方式使用它们。有可能在数以千计的廉价线程中使用PLINQ吗?

EN

回答 2

Stack Overflow用户

发布于 2012-06-02 03:45:43

如果“通过MAPI”指的是Outlook对象模型(在VSTO中可用),则不要使用线程(无论是通过PLINQ还是显式)。Outlook对象模型将所有调用封送回主线程,这使得该过程比直接从主线程本身运行它们要慢。

来自Selecting an API or Technology for Developing Outlook Solutions

对Outlook对象模型和PIA的所有调用都在Outlook的主前台线程上执行。Outlook对象模型支持的唯一线程模型是单线程单元(STA)。不支持从后台线程调用Outlook对象模型或PIA,这可能会导致解决方案出现错误和意外结果。

如果你想使用托管代码多线程访问MAPI,你最好的选择是Redemption库(商业第三方解决方案)。

票数 2
EN

Stack Overflow用户

发布于 2012-06-02 05:54:34

这是针对您的任务的PLINQ解决方案的想法:

代码语言:javascript
复制
public IEnumerable<IMessage> GetMessagesParallel(IEnumerable<IConnection> connections)
{
    return connections
        .AsParallel()
        .WithDegreeOfParallelism(10)
        .SelectMany(connection => GetMessages(connection));
}

此方法接受多个可供使用的连接。10个线程将开始从每个连接并行拉取消息。GetMessages是实际拉取消息的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10856371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档