我的应用程序中有一些非常旧的代码,我意外触发了:
var json = table.CreateQuery<ActionLog>().ToList().ToJson();
另一名嫌犯是:
var action_log_list = await table.CreateQuery<ActionLog>()
.Where(log => log.StartTime > startTime)
.AsTableQuery()
.[...]
问题是这张桌子很大 - 可能是数亿。
大约在我点击这段代码的同时,它取出了我的应用程序的一个实例,并且一个实例没有回来超过一个小时。即使在重新开始之后。
现在我正在调查一些轻微性能问题,所以我很想知道;这是巧合,还是上面的代码可以关闭一个表存储 - 就像一个'真正长时间运行的查询',然后阻塞即插入或读取该表?
答案 0 :(得分:0)
大约在我点击这段代码的同时,它取出了我的应用程序的一个实例,并且一个实例没有回来超过一个小时。即使在重新开始之后。
根据我的知识,我们可以使用ExecuteSegmentedAsync来改善表现。以下是演示代码。
var query = table.CreateQuery<ActionLog>().AsTableQuery();
TableContinuationToken continuationToken = null;
do
{
// Execute the query async until there is no more result
var queryResult = await query.ExecuteSegmentedAsync(continuationToken);
// to do something
continuationToken = queryResult.ContinuationToken;
} while (continuationToken != null);
由于它是巨大的表,它可能仍然需要很长时间才能做到这一点。我不会在我身边测试它。
但根据我的经验,如果我们想要处理如此庞大的记录,我建议你可以使用Azure Data factory来做到这一点。