【问题标题】:Retrieving Mail via Microsoft Graph is slower than EWS通过 Microsoft Graph 检索邮件比 EWS 慢
【发布时间】:2021-08-27 06:52:47
【问题描述】:

我们希望通过 C# 应用程序从 Office365 收件箱中检索电子邮件。 我们曾经使用 EWS 但想更改为 Graph。但是,如果我们通过 Graph 检索一封电子邮件,它所花费的时间是 EWS 的两倍(约 400 毫秒 vs 约 200 毫秒)。

这里是 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 Explorer 或 Postman 上执行相同的端点并看到相同的响应时间?

标签: c# microsoft-graph-api exchangewebservices microsoft-graph-mail


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我的猜测是,graph api 永远不会比 EWS api 快。

    graph api 是“只是”(不是正确的词)一个真正花哨的快速 api 代理,将所有可用资源组合到一个 api。

    因此,如果您调用图形 api,则会发生以下情况: 你的请求 -> graph api -> Exchange rest api

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-26
      相关资源
      最近更新 更多