EWS:Exchange Web服务。 多次调用ResolveName – Perfomance Hit(当然)

您好Stackoverflow社区,

我通过EWS从一个Outlook帐户加载所有Exchange Outlook联系人。 不幸的是,当联系人的电子邮件地址在我们自己的Active Directory中时,它会被转换为不同的格式(/ o = …; ou = …; cn = …)。 要将其转换为常规电子邮件地址,我使用的是EWS-Service对象的ResolveName方法。

现在问题是:我循环遍历FindItems结果的所有项目,将返回的数据映射到我自己的C#类。 在这个循环中,我必须调用ResolveName-Method,它总是导致对EWS的调用。 说到几个联系人,这需要一些时间。

我已经缓存了以前解决过的地址。 但是,当然,第一次通话时会有这种性能受到打击。 问题显然是:有没有办法减少这个名称 – 解决电子邮件的问题?

提前致谢!

我在循环内部的调用:

EmailAddress email; if (contact.EmailAddresses.TryGetValue(EmailAddressKey.EmailAddress1, out email)) { person.Email = GetResolvedEmailAddress(email.Address, svc); } 

GetResolvedName-Method(用于缓存):

  private static Dictionary ResolvedEmailAddressCache = new Dictionary(); private static String GetResolvedEmailAddress(string address, ExchangeService svc) { if (ResolvedEmailAddressCache.ContainsKey(address)) return ResolvedEmailAddressCache[address]; NameResolutionCollection nd = svc.ResolveName(address); foreach (NameResolution nm in nd) { if (nm.Mailbox.RoutingType == "SMTP") { ResolvedEmailAddressCache.Add(address, nm.Mailbox.Address); return nm.Mailbox.Address; } } ResolvedEmailAddressCache.Add(address, address); return address; } 

很不幸的是,不行。 我唯一能想到的是使用LDAP解析邮件地址。 这可能会更快。