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()
方法的末尾,该实例将被标记为符合垃圾收集条件。因此,一旦没有可以影响它的代码,它就不能被重用

在第二个示例中,由于
消息
实例实际上属于整个
程序
类,因此在
程序
类超出范围之前,它不会被标记为符合垃圾收集的条件,如果命名约定与它看起来一样,则意味着它根本不会被垃圾收集,只有当程序退出时,内存才会被回收

哪个更好取决于
程序
类的哪些其他成员需要访问消息。理想情况下,您不希望将
消息
实例公开给
程序
类中不需要了解它的其他部分,因此,如果除了
发送电子邮件()方法
之外没有其他方法需要访问
消息
实例,那么请保留第一个版本