0

我想从 Exchange 服务器(2010 通过 EWS API)检索信息。具体来说,我想构建一个 Windows 服务来遍历所有交换用户并使用非个性化索引他们的私人邮箱。效果很好,但是当我一个接一个地执行此操作时(取决于邮箱量和用户数量),它的速度非常慢。索引速度现在约为每分钟 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
    结果:相同的结果!每个exe的调用都变慢了!

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

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

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

4

2 回答 2

0

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

于 2012-06-14T21:24:28.007 回答
0

您是否了解为什么单独的服务可以使您的性能如此提升?限制是在服务帐户级别应用的,因此您从哪里拨打电话应该无关紧要。

于 2012-08-05T01:24:11.173 回答