При загрузке файла на S3 с использованием класса TransportUtility
существует возможность либо использовать FilePath
, либо входной поток. Я использую многокомпонентные загрузки.Amazon S3 Transferutility использует FilePath или Stream?
Я загружаю множество вещей, некоторые из которых являются файлами на диске, а другие - сырыми потоками. В настоящее время я использую сорт InputStream
для всего, что работает нормально, но мне интересно, следует ли мне дополнительно специализировать этот метод. Для файлов на диске я в основном использую File.OpenRead
и передаю этот поток в InputStream
запроса на передачу.
Есть ли какая-либо прибыль от прироста производительности или нет, чтобы предпочесть метод FilePath
по сравнению с InputStream
, где ввод известен как файл.
Короче говоря: Это то же самое
using (var fs = File.OpenRead("some path"))
{
var uploadMultipartRequest = new TransferUtilityUploadRequest
{
BucketName = "defaultBucket",
Key = "key",
InputStream = fs,
PartSize = partSize
};
using (var transferUtility = new TransferUtility(s3Client))
{
await transferUtility.UploadAsync(uploadMultipartRequest);
}
}
В:
var uploadMultipartRequest = new TransferUtilityUploadRequest
{
BucketName = "defaultBucket",
Key = "key",
FilePath = "some path",
PartSize = partSize
};
using (var transferUtility = new TransferUtility(s3Client))
{
await transferUtility.UploadAsync(uploadMultipartRequest);
}
Или есть ли существенная разница между этими двумя? Я знаю, если файлы большие или нет, и может предпочесть тот или иной метод на основе этого.
Edit: Я также сделал некоторые декомпилировать S3Client, и действительно, кажется, какая-то разница в отношении уровня параллелизма передачи, как найти в MultipartUploadCommand.cs
private int CalculateConcurrentServiceRequests()
{
int num = !this._fileTransporterRequest.IsSetFilePath() || this._s3Client is AmazonS3EncryptionClient ? 1 : this._config.ConcurrentServiceRequests;
if (this._totalNumberOfParts < num)
num = this._totalNumberOfParts;
return num;
}
Это действительно не матер, даже если он на 100 раз медленнее, чем другой, он незначителен по сравнению со скоростью ввода-вывода на диске, выбрал версии, в которых у него меньше строк кода, что значительно ускоряет понимание и поддержку другими программисты. –