【问题标题】:Amazon S3 S3DirectoryInfo LastWriteTimeUtc is very slowAmazon S3 S3DirectoryInfo LastWriteTimeUtc 非常慢
【发布时间】:2017-08-01 14:01:34
【问题描述】:

我正在迭代一个仅包含 1 个文件夹的 Amazon S3 存储桶。 我正在使用 C# 和这段代码来获取内容:

s3Root.GetDirectories();

它工作得很快,然后我将结果分配给这样的自定义对象

foreach (var subdirectories in s3Root.GetDirectories())
{
    var item = subdirectories.FullName.Split(':')[1].Replace('\\', '/').TrimStart('/');
    var itemUrl = FullBucketUrl + item;
    myList.Add(new S3Info(subdirectories, itemUrl, "Folder", item));
}

然后在 S3Info 的构造函数中我有这个变量赋值

LastModified = itemInfo.LastWriteTimeUtc;

其中 itemInfo 是 S3DirectoryInfo.LastWriteTimeUtc

完整的调用大约需要 13 秒,最后一次分配需要 11 秒以上。为什么?

该调用是否再次转到 S3?我不明白,甚至去 S3 为什么要 11 秒!?

s3Root.GetDirectories() 正在返回 S3DirectoryInfo[] 而不是像 IQueryable 或 IEnumerable 那样的延迟,所以它应该已经从我看到的内容中实现了。

提前致谢。吉列尔莫。

【问题讨论】:

    标签: c# amazon-web-services amazon-s3


    【解决方案1】:

    是的,访问该属性(以及该类上的大多数其他属性)将转到 S3。 S3DirectoryInfo 和相关类旨在模仿 System.IO.*Info 类,它们实际上并不缓存任何信息。 GetDirectories 只是从 S3 中提取对象键列表。

    最后写入日期实际上也没有存储在代表文件夹的对象上。它是通过枚举文件夹中的每个对象并返回最新的来计算的,这对于大型文件夹来说可能非常慢。

    如果您想对此进行优化并减少往返次数,最好的办法是使用AmazonS3Client.ListObjects 抓取大量对象并手动计算每个文件夹的最后写入日期。

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 1970-01-01
      • 2021-04-27
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      相关资源
      最近更新 更多