using System;
using System.Collections.Generic;
using System.Text;
namespace dependence
{
class Program
{
static void Main(string[] args)
{
//依赖问题
//System.IO.FileStream实现使用了内存缓存区,只有在内存缓存区充满时,该类型才会将内存缓存区中的数据刷新到文件中去。
//StreamWriter对象内部会保存Stream对象的引用。当向一个StreamWrite对象写入数据时,它会先将数据缓存在自己的内存缓存区,
//当的内存缓存区充满时,StreamWrite对象才会将内存缓存区中的数据写入FileStream对象的内存缓存区中。
//只实现了释放模式,因为对象之间可能包含着彼此的引用,垃圾收集器无法正确地推断对它们执行终结的顺序。
//假设如果FileStreame对象首先被执行终结操作,它将关闭文件。然后,当StreamWriter对象被执行终结操作时,它将试图向已关闭的文件写入数据,将抛出异常。
//假设如果StreamWriter对象首先被执行终结操作时,其中的数据会被安全地写入文件中。
//Microsoft的解决方法是不让StreamWriter类实现Finalize方法,从而无法将内存缓存区中的数据刷新到FileStream对象。
//这意味着忘记显示关闭StreamWrite对象,其内存缓存区中的数据必然丢失。
//Microsoft希望开发人员认识到这一点,并在自己的代码中显示地调用Dispose方法或Close方法。
public static void Main()
{
FileStream fs = new FileStream("Temp.dat", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
try
{
// Write the bytes to the temporary file.
sw.Write("Hi there");
}
finally
{
// Explicitly close the file when done writing to it.
if (sw != null)
((IDisposable)sw).Dispose();//或者fs.Close();
}
// Delete the temporary file.
File.Delete("Temp.dat"); // This always works now.
} }
}
}