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

时间:2011-08-31 09:39:31

标签: c# performance exchangewebservices

您好Stackoverflow社区,

我通过EWS从一个Outlook帐户加载所有Exchange Outlook联系人。不幸的是,当联系人的电子邮件地址在我们自己的Active Directory中时,它会被转换为不同的格式(/ o = ...; ou = ...; cn = ...)。 要将其转换为常规电子邮件地址,我使用的是EWS服务对象的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<String, String> ResolvedEmailAddressCache = new Dictionary<String, String>();
    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;
    }

1 个答案:

答案 0 :(得分:2)

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