昨天碰到棘手的问题, 最终发现原因, 发一贴, 希望对碰到同样问题的同学有所帮助

当用Image image = Image.FromFile(path);解析文件时, 如果碰到异常, 当然不是Image.FromFile方法本身抛出的。 比如说在一个线程中调用Image.FromFile, 另外一个地方调用Thread.Abort终止线程, 就会产生"线程退出异常“.

此时相关的文件和内存资源GC是没有办法对其进行回收的, 产生内存泄漏

正确的的代码写法是using(Image image = Image.FromFile(path)), 这个无论如何image都会Dispose

其它替代方法如Image.FromStream(stream), 记得using(XXXStream stream = XXX.GetStream())

话说.net是内存自动管理的语言, 但完全做到无内存泄漏是不可能的, .net也是人创造的, 只要是人创造的事物就一定会有缺陷, 人能做得的就是让问题更少, 或者把问题数量收敛到一个区域

估计其它文件操作也会有此问题, 抛砖引玉, 望大家留言补充

希望对大家有帮助

昨天碰到棘手的问题, 最终发现原因, 发一贴, 希望对碰到同样问题的同学有所帮助当用Image image = Image.FromFile(path);解析文件时, 如果碰到异常, 当然不是Image.FromFile方法本身抛出的。 比如说在一个线程中调用Image.FromFile, 另外一个地方调用Thread.Abort终止线程, 就会产生"线程退出异常“.  此时相关的
网上查到的代码,多数的写法使用Memory Stream 来实现: 代码如下:new Thread(new ThreadStart(() => {    var bitmap = new Bitmap Image ();    bitmap.BeginInit();     using (var stream = new Memory Stream (File.ReadAllBytes(…))) {        bitmap. Stream Source = stream ;        bitmap.CacheOption = BitmapCacheOption.OnLoad;        bitmap
1、 内存 不足,或GDI+发生了一般性错误。 问题描述:在 Image .FromFile(souceFile)出抛出System.OutOfMemoryException" 内存 不足"异常。 出现这种问题是由于souceFile文件被破坏,或者...
很多时候,我们会使用图片来装饰UI,比如作为控件背景等。 而这些图片可以分为两种形式,即存在于本地文件系统中的图片和存在于 内存 中的图片 对于这两种形式的图片,在WPF中,使用 方法 不同,下面主要说明针对这两种形式图片的使用 方法 一、存在于本地文件系统中的图片文件 对于此类图片,使用非常简单,在xaml中直接指定路径即可,如: List<string[]> data = new List<string[]>(); using (var reader = new Stream Reader("data.csv")) while (!reader.EndOf Stream ) var line = reader.ReadLine(); var values = line.Split(','); data.Add(values); // 处理读取到的数据 foreach (var row in data) foreach (var col in row) Console.Write($"{col} "); Console.WriteLine(); 写入 CSV 文件: ```csharp using System; using System.Collections.Generic; using System.IO; class Program static void Main(string[] args) List<string[]> data = new List<string[]>(); // 添加数据 data.Add(new string[] { "John Doe", "30", "Male" }); data.Add(new string[] { "Jane Doe", "25", "Female" }); using (var writer = new Stream Writer("output.csv")) foreach (var row in data) writer.WriteLine(string.Join(",", row)); 注意:在写入 CSV 文件时,使用逗号分隔每行数据。如果某个数据中本身就包含逗号,则需要进行特殊处理,例如使用双引号将该数据包裹。