use*_*155 11 .net c# amazon-s3
所以我正在编写一个迁移应用程序,从我们的本地存储中获取一些数据并将其上传到亚马逊.一切都运行正常,除了一旦我进入大于15兆的文件(megs,是的,不是Gigs),应用程序冻结.
这是在C#中,非常简单.
var transferRequest = new TransferUtilityUploadRequest
{
Key = firstKey,
FilePath = fileName,
BucketName = ContentBucket,
Timeout = 3600000,
ContentType = GetContentTypeForFileExtension(fileName)
};
transferRequest.UploadProgressEvent += DisplayFileProgress;
transferUtil.Upload(transferRequest);
Run Code Online (Sandbox Code Playgroud)
就像我说的那样,对于15兆或更小的文件来说效果很好......但是对于较大的文件,它只会停止并永远停留在"上传"命令上.15 megs需要40秒,所以我期待30兆的测试文件,也许2分钟...但10分钟后,没有爱.
任何建议都会受到赞赏,不幸的是,我将处理大量超过50兆的文件.
请注意,如果我在Visual Studio .net中的AWS Explorer中,我可以手动上传50+ megs的文件而不会出现任何问题并且相对较快.
所以这很"有趣"......在进一步审查中,我的50兆字节文件上传得很好.它附加到UploadProgressEvent的代码实际上导致事情冻结,因为如果我将其注释掉,那么50 meg文件上传没有问题.
如果我保留此代码,则15兆字节的文件会在进度条上显示其进度.但是,任何大于15兆的东西实际上都会导致整个应用程序冻结.任何人都可以告诉我处理进度条更新的代码可能存在什么问题?
private void DisplayFileProgress(object sender, UploadProgressArgs args)
{
pbFileProgress.Invoke((MethodInvoker)delegate {
pbFileProgress.Value = args.PercentDone;
pbFileProgress.Refresh(); });
}
Run Code Online (Sandbox Code Playgroud)
而我只是设置" transferRequest.UploadProgressEvent += DisplayFileProgress".就像我说的那样,奇怪的是,这适用于较小的文件但是将所有内容锁定为较大的文件.
DisplayFileProgress 是线程安全的吗?我相信(查看一些较旧的代码)回调是由每个上传线程独立调用的。
下面的代码是一个小实用程序的一部分,我们用它来上传 5 MB 到 1-2 GB 左右的文件。它与您的没有太大不同,但也许会有所帮助。
var writerlock = new object();
using (var tu = new TransferUtility(amazonS3Client, tuconfig))
{
var turequest = new TransferUtilityUploadRequest()
.WithBucketName(bucket)
.WithFilePath(file)
.WithKey(Path.GetFileName(file))
.WithStorageClass(S3StorageClass.ReducedRedundancy)
.WithPartSize(5 * 1024 * 1024)
.WithAutoCloseStream(true)
.WithCannedACL(S3CannedACL.PublicRead);
tuconfig.NumberOfUploadThreads = Environment.ProcessorCount - 1;
// show progress information if not running batch
if (interactive)
{
turequest.UploadProgressEvent += (s, e) =>
{
lock (writerlock)
{
... our progress routine ...
}
};
}
tu.Upload(turequest);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6746 次 |
| 最近记录: |