通过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中。

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

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

最新更新