如何优化Graph API获取AAD中2.5万个会议室Object ID的效率?
优化AAD会议室Object ID获取性能的方法
原代码的性能瓶颈
你当前的代码存在N+1查询问题:获取2.5万个会议室后,循环中每个会议室都单独发起一次/users/{email}请求,累计2.5万次HTTP调用,不仅耗时极长,还容易触发Graph API的限流机制。
最优解决方案:直接复用Room对象的ID
在Microsoft Graph中,microsoft.graph.room类型的资源本身的Id属性,就是对应的Azure AD用户(会议室账户)的Object ID,完全不需要额外调用Users接口。
修改后的代码示例:
var roomUrl = graphClient.Places.AppendSegmentToRequestUrl("microsoft.graph.room"); var response = await new GraphServicePlacesCollectionRequest(roomUrl, graphClient, null) .Select("id, emailAddress") // 只请求需要的字段,进一步提升性能 .GetAsync(); // 处理第一页数据 foreach (var room in response.CurrentPage) { users.Add(room.Id); // 直接获取Object ID,无需额外请求 } // 处理分页(2.5万个会议室必然存在多页结果) while (response.NextPageRequest != null) { response = await response.NextPageRequest.GetAsync(); foreach (var room in response.CurrentPage) { users.Add(room.Id); } }
额外优化建议
- 使用
Select方法指定仅需要返回的字段,减少响应数据量,提升传输和解析速度。 - 若后续需要获取更多用户属性,可使用Graph API的批量请求功能,将多个查询打包为单次HTTP调用,但针对当前需求,直接复用Room的ID已经足以解决性能问题。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

