背景:之前写有关文件操作的都使用using来将其包住,今天突然发现using的时候在有些时候是非必要的。
之前老是这样子写
private void selectFileMethod(object obj)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
if (openFileDialog.ShowDialog() == true)
{
string selectedFilePath = openFileDialog.FileName;
// 处理选中的文件路径
}
}
}
但是对这里的OpenFileDialog来说,是没有必要的
首先明确using的经常的使用场景是文本流,数据库连接,窗口句柄,图标,打印机资源,主要用于那些实现了 IDisposable
接口的对象。这样在块结束后自动调用Dispos方法,释放资源。但是这里的
OpenFileDialog,没有实现IDisposable
接口,不持有任何显式释放的非托管资源。它的内存资源.NET会自动管理的,不需要手动释放。
比较常见的实现了IDisposable接口的类有
- 流(Stream)类:FileStream, MemoryStream等
- I/O类:BinaryReader, StreamReader等
- 数据库连接类:SqlConnection, OracleConnection等
- 图像处理类:Bitmap, Icon等
- 加密类:SymmetricAlgorithm, RSA等
补充:IDisposable
接口除了使用非托管资源类实现外,需要占用大量托管内存的类实现IDisposable
接口后,方便触发垃圾回收,减轻GC压力,图像就是这样。