[英]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 的包装器,其类型为IDisposable
的ReferenceReadStream , 但值得一提的是,它实际上并没有处理上传的文件 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.