C# FileStream的资源释放?
程序中有一个Timer,每一秒钟调用下面的方法写出数据到FileName文件中。我这样写,资源是不是都可以释放?是不是如果把objFileStream.Dispose()...
程序中有一个Timer,每一秒钟调用下面的方法写出数据到FileName文件中。
我这样写,资源是不是都可以释放?
是不是如果把
objFileStream.Dispose();
objStreamWriter.Dispose();
换成
objFileStream.Close();
objStreamWriter.Close();
资源就不能被释放了?
谢谢
private void WriteFile(string detail)
{
FileStream objFileStream = null;
StreamWriter objStreamWriter = null;
try
{
objFileStream = new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.None);
objStreamWriter = new StreamWriter(objFileStream);
objStreamWriter.WriteLine(detail);
objFileStream.Dispose();
objStreamWriter.Dispose();
}
catch (Exception e)
{
Logger.WriteDebugLog(e.Message);
}
finally
{
if (objFileStream != null) objFileStream.Dispose();
if (objStreamWriter != null) objStreamWriter.Dispose();
}
}
是不是调用了Dispose();
就不用Close();了? 展开
我这样写,资源是不是都可以释放?
是不是如果把
objFileStream.Dispose();
objStreamWriter.Dispose();
换成
objFileStream.Close();
objStreamWriter.Close();
资源就不能被释放了?
谢谢
private void WriteFile(string detail)
{
FileStream objFileStream = null;
StreamWriter objStreamWriter = null;
try
{
objFileStream = new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.None);
objStreamWriter = new StreamWriter(objFileStream);
objStreamWriter.WriteLine(detail);
objFileStream.Dispose();
objStreamWriter.Dispose();
}
catch (Exception e)
{
Logger.WriteDebugLog(e.Message);
}
finally
{
if (objFileStream != null) objFileStream.Dispose();
if (objStreamWriter != null) objStreamWriter.Dispose();
}
}
是不是调用了Dispose();
就不用Close();了? 展开
3个回答
展开全部
Dispose是用来释放非托管资源的,并不会释放托管资源,new是从托管堆中分配得资源,只能通过GC回收,无法手动释放。你可以使用System.GC.Collect()来强制进行GC,用System.GC.WaitForFullGCComplete()等待GC完成。
如果确实需要,使用System.Runtime.InteropServices.Marshal来手动申请和释放非托管内存,但是,其中无法保存托管对象,只能保存整型、浮点型和字符型及其数组,或者具有StructLayout或MarshalAs特性的结构或类。 (会带来一定的运行期代价)
如果确实需要,使用System.Runtime.InteropServices.Marshal来手动申请和释放非托管内存,但是,其中无法保存托管对象,只能保存整型、浮点型和字符型及其数组,或者具有StructLayout或MarshalAs特性的结构或类。 (会带来一定的运行期代价)
展开全部
"是不是调用了Dispose();
就不用Close();了?"
是的,数据库也是一样。调用Close是为了尽快关闭连接或者文件,另外一个是良好的编码习惯。
而且如果你用了using块,在外面的try/catch里不用最后的finally块,我以前曾经测试过,有意抛出异常,Dispose仍然会被执行。
就不用Close();了?"
是的,数据库也是一样。调用Close是为了尽快关闭连接或者文件,另外一个是良好的编码习惯。
而且如果你用了using块,在外面的try/catch里不用最后的finally块,我以前曾经测试过,有意抛出异常,Dispose仍然会被执行。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的这段c#代码编译能通过吗?
pc[0]
=
'a';
char
强转byte?
会报错吧。。。
byte[]
pc
=
encoding.utf8.getbytes(new
char[]{'a','b','c',(char)0},0,4);
using
(filestream
fs
=
new
filestream(@"c:\test.txt",
filemode.createnew,
fileaccess.readwrite))
{
fs.write(pc,
0,
pc.length);
}
这几行代码应该能满足你的要求吧。。。如果是单个写的话,修改一下getbytes中的char数组就行了
pc[0]
=
'a';
char
强转byte?
会报错吧。。。
byte[]
pc
=
encoding.utf8.getbytes(new
char[]{'a','b','c',(char)0},0,4);
using
(filestream
fs
=
new
filestream(@"c:\test.txt",
filemode.createnew,
fileaccess.readwrite))
{
fs.write(pc,
0,
pc.length);
}
这几行代码应该能满足你的要求吧。。。如果是单个写的话,修改一下getbytes中的char数组就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询