繁体   English   中英

是否有必要Dispose对象包含IFormFile(二进制文件) asp.net core 2

[英]is it necessary to Dispose objects contains IFormFile (binary file) asp.net core 2

我正在 asp.net 核心 2 上的上传服务 API 上工作,因为我正在处理文件,所以我想知道在完成包含文件的 object 或保留它之后是否有必要实现 IDispose 接口并调用 Dispose() 方法到 .net 调用垃圾收集器的核心框架。

编辑 1:(这是我的代码的一部分)

 public class UploadFileModel
{
    [Required]
    public IFormFile FileBinary { get; set; }

    [Required]
    [MaxLength(50)]
    public string Type { get; set; }
}

我会说不,没有必要这样做。 通常,Microsoft在需要处置的类型上实现IDisposable ,例如ef-core的DbContext IFormFile的实现包含一个流,该流在调用时被放置在finally语句中

Task CopyToAsync(Stream target, CancellationToken cancellationToken = default (CancellationToken));

您只需要确保关闭传入的流即可。

不,您不需要处理 object 本身或IFormFile ,因为它们不是 IDisposable。

但是,如果您创建了它的新副本,则需要处理自己的 stream(请参阅@alsami 的回答)。

或者,如果使用OpenReadStream() ,它会返回一个包含底层文件 stream 的包装器,其类型IDisposableReferenceReadStream但值得一提的是,它实际上并没有处理上传的文件 stream ...但此实现可能会在未来发生变化。

以下面读取文件stream为例:

public async Task<IActionResult> Index(UploadFileModel requestModel)
{
    using (var fileStream = requestModel.FileBinary.OpenReadStream()) // returns ReferenceReadStream object
    {            
        // Make use of fileStream...

    } // using calls Dispose(), but is no-op
}

所以没有任何原始 stream 的访问权限供您处理,让您担心,但您如何使用它很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM