gpt4 book ai didi

c# - 冗余设置为空/在被调用函数中设置为空

转载 作者:行者123 更新时间:2023-11-30 22:54:28 24 4
gpt4 key购买 nike

我创建了一个函数来确保正确处理对象。此功能包括将对象设置为空。我想知道将对象设置为 null 的行是否无用(因此我将删除该行),然后添加一行以在调用函数中将对象设置为 null。我的示例是针对 FileStream 对象的,但我认为任何其他对象(我认为)都可以代替它。我知道我可以跟踪程序的执行并查看发生了什么,但是,我想了解有关内部机制(垃圾收集?)的更多信息,这是否适用于任何对象等。

//Called function:
public static void DiscardFile(System.IO.FileStream file)
{
file.Flush();
file.Close();
file.Dispose();
//Does this work?
//When the function returns, is the file object really set to null?
file = null;
}

//Calling function:
public static void WriteStringToFile(string s, string fileName)
{
System.IO.StreamWriter file = new System.IO.StreamWriter(fileName);
file.Write(s);
DiscardFile(file);
//Is this redundant?
//Or is the line in the called function the redundant line?
file = null;
}

谢谢!

我有一个循环,可以在 30 秒内将一千个字符串写入文件。 (程序在完成执行后将写入 400K+ 字符串。)我看到循环(每隔一段时间)在 file.Write(s) 行等待,并且应用程序的内存占用量增加了。那是针对另一个线程的,但想知道上面代码的行为。

谢谢!

最佳答案

抱歉,您的实现危险

public static void WriteStringToFile(string s, string fileName)
{
System.IO.StreamWriter file = new System.IO.StreamWriter(fileName);
file.Write(s); // <- the danger is here
DiscardFile(file);
//Is this redundant? Yes, it's redundant
//Or is the line in the called function the redundant line?
file = null;
}

假设您在 file.Write(s); 上抛出异常,这意味着 DiscardFile(file); 将永远不会执行,您有 资源泄漏(HFILE - 打开的文件句柄)。为什么不坚持标准使用模式:

public static void WriteStringToFile(string s, string fileName) 
{
// Let system release all the resources acquired
using var file = new System.IO.StreamWriter(fileName);
{
file.Write(s);
} // <- here the resources will be released
}

C# 8.0 的情况下,您可以摆脱讨厌的 {...} 并让系统在离开方法的作用域时释放资源(参见 https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8#using-declarations):

public static void WriteStringToFile(string s, string fileName) 
{
// Let system release all the resources acquired
using var file = new System.IO.StreamWriter(fileName);

file.Write(s);
} // <- here the resources will be released

关于c# - 冗余设置为空/在被调用函数中设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56241051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com