昨天碰到棘手的问题, 最终发现原因, 发一贴, 希望对碰到同样问题的同学有所帮助
当用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 文件时,使用逗号分隔每行数据。如果某个数据中本身就包含逗号,则需要进行特殊处理,例如使用双引号将该数据包裹。