我们目前在谷歌广告经理c#客户端中遇到了一个相当奇怪的行为。我们正在使用Google.Dfp
nuget包。
这是我们正在使用的代码:
reportQuery.dimensions = new Dimension[] {
Dimension.DATE, dimension
};
var reportJob = new ReportJob {
reportQuery = reportQuery
};
reportJob = reportService.runReportJob(reportJob);
// Set download options.
var options = new ReportDownloadOptions {
exportFormat = ExportFormat.XML,
useGzipCompression = true
};
var reportUtilities = new ReportUtilities(reportService, reportJob.id) {
reportDownloadOptions = options
};
var dimensionResponse = new List < DimensionResponse > ();
XDocument xmlDoc = null;
using(var response = reportUtilities.GetResponse()) {
using(var oReader = new StreamReader(response.DecompressedStream)) {
xmlDoc = XDocument.Load(oReader);
var serializer = new XmlSerializer(typeof (ReportResponse), new XmlRootAttribute("Report"));
var xml = xmlDoc.ToString();
using(var sr = new StringReader(xml)) {
var result = (ReportResponse) serializer.Deserialize(sr);
if (result.ReportData.DataSet.Row != null) {
dimensionResponse = result.ReportData.DataSet.Row.Select(x => new DimensionResponse {
DateString = x.Column[0].Val,
Name = x.Column[1].Val,
Impressions = int.Parse(x.Column[hasIdColumn ? 3 : 2].Val, NumberStyles.Number, CultureInfo.InvariantCulture),
Clicks = int.Parse(x.Column[hasIdColumn ? 4 : 3].Val, NumberStyles.Number, CultureInfo.InvariantCulture),
CTR = x.Column[hasIdColumn ? 5 : 4].Val,
ActiveViewViewableImpressions = int.Parse(x.Column[hasIdColumn ? 6 : 5].Val, NumberStyles.Number, CultureInfo.InvariantCulture),
ActiveViewViewableImpressionsRate = x.Column[hasIdColumn ? 7 : 6].Val
}).ToList();
}
}
}
}
return dimensionResponse;
问题发生在这一行:
using(var response = reportUtilities.GetResponse())
当我们一步一步地调试时,api返回响应大约需要2秒,但当我们删除断点并尝试不使用它时,函数完成大约需要32秒。生产服务器上的发布模式也会出现同样的缓慢。
我们认为第一次测试很慢,所有其他测试都更快,因为谷歌在后端缓存了报告,但事实并非如此,因为我们设法在不同日期的非缓存报告上重现了问题。
你知道是什么导致了这种奇怪的行为吗?
以下是您可以在这里尝试的应用程序延迟
您是否将生产密钥放入代码中,也是否超出了速率限制。
-
代码优化在应用程序引擎上优化代码的一些方法减少延迟:
-
脱机工作:使用云任务,这样用户请求就不会被阻止等待发送邮件等工作的完成。
-
异步API调用:确保您的代码不会被阻止等待以完成API调用。ndb等库提供内置支持。
-
批处理API调用:API调用的批处理版本通常更快而不是发送单独的电话。
-
去规范化数据模型:减少对数据的调用延迟通过对数据模型进行反规范化来实现持久性层。