微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 Microsoft Graph 检索邮件比 EWS 慢

如何解决通过 Microsoft Graph 检索邮件比 EWS 慢

我们希望从 C# 应用程序的 Office365 收件箱中检索电子邮件。 我们曾经使用 EWS,但想更改为 Graph。但是,如果我们通过 Graph 检索电子邮件,则需要两倍于使用 EWS 的时间(~400ms vs ~200ms)。

这是 EWS 代码

ExchangeService service = <...>;
PropertySet properties = new PropertySet(BasePropertySet.IdOnly,EmailMessageSchema.From,EmailMessageSchema.DateTimeSent,EmailMessageSchema.Subject,EmailMessageSchema.CcRecipients,EmailMessageSchema.BccRecipients,EmailMessageSchema.Importance,EmailMessageSchema.ToRecipients,EmailMessageSchema.Attachments,EmailMessageSchema.Size,EmailMessageSchema.Sender,EmailMessageSchema.Body,EmailSchema.MailComment,EmailSchema.MailImportance,EmailSchema.MailMessageClass,EmailMessageSchema.DateTimeReceived,EmailSchema.MailTransportHeader);
properties.RequestedBodyType = Microsoft.Exchange.WebServices.Data.BodyType.HTML;
EmailMessage mail = EmailMessage.Bind(service,"<mailid>",properties);

这是图形代码

GraphServiceClient client = <...>;
Message msg = client
               .Users["<user>"]
               .Messages["<mailid>"]
               .Request()
.Select("id,parentFolderId,isRead,from,sentDateTime,subject,ccRecipients,bccRecipients,attachments,importance,toRecipients,sender,body,receivedDateTime")
            .Expand("microsoft.graph.message/attachments," +
                "singleValueExtendedProperties($filter=Id eq 'Long 0xe08'" +
                " or Id eq 'String 0x1a'" +
                " or Id eq 'String 0x7d'" +
                " or Id eq 'Integer 0x17'" +
                " or Id eq 'String 0x3004')")
            .GetAsync()
            .Result;

为什么 Graph 比较慢?我们应该改变什么才能使 Graph 像 EWS 一样高性能

解决方法

我们发现只有第一次通过 Graph 访问邮件服务器需要更长的时间。每个后续请求的性能至少与通过 EWS 一样。所以这个问题已经为我们解决了。谢谢@Danstan 的评论。

,

我的猜测是图形 api 永远不会比 EWS api 快。

图形 api 是“只是”(不是正确的词)一个非常花哨且速度极快的 api 代理,将所有可用资源组合到一个 api 中。

所以如果调用graph api,会发生以下情况: 您的请求 -> 图 api -> 交换休息 api

唯一的变化是通过使用图形 API,数据在服务器级别被格式化为 JSON。所以这可能是一个小的时间/数据节省

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?