C# 如何正确地打扫教室
我有一个类,其中包含读取数据文件的函数。读取时,类将此数据存储在公共属性中 之后,我将puplic属性的内容写入数据库 然后它重复。这意味着我再次阅读了这个类的数据 在它再次出现之前,我想把教室打扫干净 最好的方法是什么C# 如何正确地打扫教室,c#,vb.net,C#,Vb.net,我有一个类,其中包含读取数据文件的函数。读取时,类将此数据存储在公共属性中 之后,我将puplic属性的内容写入数据库 然后它重复。这意味着我再次阅读了这个类的数据 在它再次出现之前,我想把教室打扫干净 最好的方法是什么 手动清除公共属性的内容更好,还是处理类更好。也许这是更优雅的方式 假设您的类看起来类似于: public class MyClass { public double IntField { get; set; } public string StringField { g
手动清除公共属性的内容更好,还是处理类更好。也许这是更优雅的方式 假设您的类看起来类似于:
public class MyClass
{
public double IntField { get; set; }
public string StringField { get; set; }
}
您的应用程序类似于:
public class MyApp
{
public void Execute() {
var myClass = new MyClass();
// set properties
myClass.IntField = 123;
myClass.StringField = "Hello";
// save to DB
}
}
每次应用程序运行时,它都会运行
Execute
方法,该方法将创建类的新实例。这样,所有的类属性都将是空的或您称之为“clean”的。创建新方法,将其命名为“clear_data”,在从执行此操作的函数加载数据之前调用它。也可能是您需要从析构函数调用它以防止内存泄漏(如果您有指向某个已分配内存的指针) 纪念图案呢?可能对您有用:
或者,正如前面所指出的,您还有3种其他好的可能性:
-创建一个将属性设置为默认值的方法Clear()
,
-如果您有一些非托管资源,可以使用IDisposable接口,
-创建包含类的空实例的静态只读属性并重新分配它。但我会选择Memento/Clear way。他的意思是重置为初始状态state@Igor可能会将成员重置为其
默认值
似乎您正在尝试重用引用类实例的变量来表示相同类型的不同对象。不要这样做。只需重新初始化变量并用属性的新值填充它查看IDisposable这是定义需要清理的内容的常用方法
到目前为止,最简单的方法是创建类的新实例。这有点浪费,但它的寿命很短,而且永远不会脱离第0代。第0代分配从来都不需要担心。但这将导致许多实例。正确吗?是的,每次调用方法execute
时,它都会导致一个新的MyClass
实例。现在真正的问题是:这是个问题吗?很可能不会。垃圾收集器会很好地释放与myClass实例关联的内存;在为内存分配(或速度,或各种优化)优化代码之前,请确保这对您的应用程序来说确实是个问题,如果不是为了更好地结构化和可维护的代码,而不是“以某种方式节省一些内存字节但更难使用的代码”不知道为什么我会被否决,但@GianPaolo基本上总结了这个例子问题。这些实例将在Execute
返回后的某个时间点进行垃圾收集。只要您的对象小于86000字节,它将位于Gen-0上,垃圾收集器将在Execute返回后立即收集,因此不必担心。