C# 教我自己.net垃圾收集如何处理这个例子
所以我有一些关于垃圾收集的问题C# 教我自己.net垃圾收集如何处理这个例子,c#,.net,garbage-collection,garbage,C#,.net,Garbage Collection,Garbage,所以我有一些关于垃圾收集的问题 void send_email() { EmailMessage message = new EmailMessage(service); message.Subject = "AQState"; message.Body = Environment.MachineName + " AQState = " + get_AQState(); message.ToRecipients.Add("email@email.com");
void send_email()
{
EmailMessage message = new EmailMessage(service);
message.Subject = "AQState";
message.Body = Environment.MachineName + " AQState = " + get_AQState();
message.ToRecipients.Add("email@email.com");
message.Send();
}
如果我有一个每小时调用一次send_email()的程序,GC将如何处理在1小时、2小时和3小时创建的对象。所以每小时它都会创建一个新的消息对象,GC会丢弃旧的消息对象吗?还有什么被认为是更好的做法?你在上面或下面看到什么
namespace AQState_Test
{
class Program
{
EmailMessage message = new EmailMessage(service);
static void Main(string[] args)
{
send_email();
}
void send_email()
{
message.Subject = "AQState";
message.Body = Environment.MachineName + " AQState = " + get_AQState();
message.ToRecipients.Add("email@email.com");
message.Send();
}
<>我在编程方面自学,我非常喜欢它,但是发现如果有人能推荐一本书来教我一些基础知识,给我一个更好的基础,那我就失去了一些基础知识。 < p> <代码>新< /Cord>关键字总是会生成所需类的新实例。一旦实例无法访问,即在第一个示例中的
send_email()
方法的末尾,该实例将被标记为符合垃圾收集条件。因此,一旦没有可以影响它的代码,它就不能被重用
在第二个示例中,由于消息
实例实际上属于整个程序
类,因此在程序
类超出范围之前,它不会被标记为符合垃圾收集的条件,如果命名约定与它看起来一样,则意味着它根本不会被垃圾收集,只有当程序退出时,内存才会被回收
哪个更好取决于程序
类的哪些其他成员需要访问消息。理想情况下,您不希望将消息
实例公开给程序
类中不需要了解它的其他部分,因此,如果除了发送电子邮件()方法
之外没有其他方法需要访问消息
实例,那么请保留第一个版本