gpt4 book ai didi

c# - 为什么 Azure 表存储操作会默默失败?

转载 作者:行者123 更新时间:2023-12-03 03:19:22 24 4
gpt4 key购买 nike

我有一个使用 Microsoft.WindowsAzure.StorageClient v1.7 构建的辅助角色。在我的开发机器上,使用我的计算模拟器,该应用程序运行良好。但是,当我部署到 Azure 时,表存储操作会默默失败。代码如下 - BackupResult 类继承自 TableServiceEntity:

Trace.WriteLine("Entering cloud storage method");
CloudTableClient client = storageAccount.CreateCloudTableClient();
Trace.WriteLine("Got the client..."); // Last message received.
client.CreateTableIfNotExist("LastRun");
Trace.WriteLine("Created the table (maybe)...");
TableServiceContext context = client.GetDataServiceContext();
Trace.WriteLine("Got the context...");
BackupResult lastResult = context.CreateQuery<BackupResult>("LastRun").ToList().OrderByDescending(x => x.RunTime).FirstOrDefault();
Trace.WriteLine("Returning the last result. It ran at: " + lastResult.ToString());
return lastResult;

根本没有抛出任何异常,但我没有在标记消息下方看到任何跟踪日志,并且我的应用程序的逻辑不会在此方法之外继续进行。我的本地配置与我的云配置相同。什么会导致这种行为?

最佳答案

我的心灵调试能力告诉我,这并没有失败——只是花了很长时间。 .ToList() 调用将尝试检索表中的每个实体。您的开发存储表可能没有太多行(几千?),而生产存储表则有更多行。所以这需要更长的时间。我认为您还会尝试将所有这些实体保留在内存中,如果您开始使用页面文件,这也可能会导致速度减慢。

您可以通过向查询添加 Take(1000) 来测试这个假设。显然这不会给你正确的答案,你只是想看看它是否完成。我的 v1.7 技能有点生疏,但我想应该是这样的:

BackupResult lastResult = context.CreateQuery<BackupResult>("LastRun")
.Take(1000) //BEFORE the .ToList() - very important!
.ToList()
.OrderByDescending(x => x.RunTime)
.FirstOrDefault();

如果有限查询确实成功完成,那么实际的解决方案是找出如何快速执行该查询。您要么需要向查询添加一些条件,以减少从表存储返回的结果的大小,要么可能以不同的方式索引数据(例如,将 RunTime 合并到 RowKey 中)。

关于c# - 为什么 Azure 表存储操作会默默失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14750158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com