EWS 呼叫是否可以并行完成而不会减慢速度



我想从 Excachange Server 检索信息(2010 通过 EWS API)。详细地说,我希望构建一个 Windows 服务来遍历所有 excachange 用户并使用非个性化为其私人邮箱编制索引。这很好用,但是当我一个接一个地做这个用户时,它非常慢(取决于邮箱数量和用户的数量)。索引速度现在约为每分钟 500 个项目。

在我的测试系统上,以下调用大约需要 250 毫秒:

PropertySet myPropertySet = new PropertySet(BasePropertySet.FirstClassProperties,    ItemSchema.ParentFolderId);
myPropertySet.RequestedBodyType = BodyType.Text;
myPropertySet.Add(entryIdExtendedProperty);
Item item = Item.Bind(es, itemKey, myPropertySet); 

所以我的想法是做一个并行化。到目前为止,我尝试了 3 种方法:

  1. 后台辅助角色:每个用户一个工作线程。结果:无效。似乎这样做会减慢通话速度。总之,整体速度保持不变。

  2. 单独的 EXE 进程:每个用户一个 EXE。我创建了一个"Worker"-Exe,并以用户作为参数调用它们:IndexWorker.exe-user1
    结果:相同的结果!每个前任的呼叫都变慢了!

  3. 单独的 Windows 服务:每个用户一个服务。结果:突然,请求没有减慢,这意味着我可以将整体速度提高到每分钟 500 个项目的倍数(我最多尝试 3 个进程,即每分钟 1500 个项目)。不错,但我让我独自回答这个问题:

为什么 EWS 呼叫在 1) 和 2) 中变慢,而在 3) 中没有?线程对我来说是最优雅的方式,我可以使用任何选项或设置吗?

我阅读了一些关于限制策略和 EWSFindCountLimit 的内容。这是正确的方向吗?

您是否深入了解

为什么单独的服务会给您带来如此高的性能?限制在服务帐户级别应用,因此从何处进行调用无关紧要。

您的问题是限制策略。您需要为服务帐户创建不限制 EWS 或 RPC 活动的限制策略。

相关内容