当前位置: 首页 > 知识库问答 >
问题:

c#:为什么GC不能在我的代码中收集Weakreference的目标?[副本]

丌官淇
2023-03-14

我写了这段代码:

            dog joe = new dog();
            WeakReference wr = new WeakReference(joe);
            if (wr.IsAlive)
            {
                Console.WriteLine("Yes,first time");
            }
            else
            {
                Console.WriteLine("No,first time");
            }

            GC.Collect();

            if (wr.IsAlive)
            {
                Console.WriteLine("Yes,second time");
            }
            else
            {
                Console.WriteLine("No,second time");
            }

我期望得到这样的结果:是的,第一次不,第二次

但GC似乎没有收集到我的WeakReference的目标(joe)。结果是:是的,第一次是的,第二次

我的问题是什么?...我误解了弱引用吗?

共有1个答案

田焕
2023-03-14

您的代码是正确的。编译为发行版,并在没有调试器(Shift F5)或直接从命令提示符下运行。有关解释,请参阅调试期间垃圾回收机制是否运行?

 类似资料:
  • 我在第5行得到一个错误,上面说“未处理的异常IOException,InvalidFormatException”

  • 我正在尝试限制关键字输入。 每当用户输入一个关键字,它就会在该关键字后面加上'span',例如。 如下面的html代码。 我可以限制字,但计数不准确,但当它达到5,它停止输入。 如果我刷新页面,我可以再输入一个,然后再阻止我一次。 奇怪的是,如果我为使用id就不起作用了。我得利用课堂。 我试过把,但不起作用,我必须保留它的资本。 jQuery: HTML:

  • 我已经检查了我的windows10机器上是否安装了python 3.8。我正在尝试安装带有pip的软件包,但终端告诉我,“[pip”不被识别为内部或外部命令、可操作程序或批处理文件。] 我知道3.4以上的Python版本已经预装了pip,那么为什么我会收到这个错误消息呢?

  • 我正在尝试使用argparse模块使我的Python程序接受灵活的命令行参数。我想传递一个简单的布尔标志,并说或来执行代码中的相应分支。 请考虑以下内容。 这是为什么?!!intflag似乎解析正确,但布尔标志总是解析为,即使我在命令行参数中明确提到我希望它是。 我哪里错了?

  • 在jdk8中,Stream提供带有、和的功能 我在注释中看到了将String Stream转换为String的示例,但我很困惑组合器在函数签名中的用途。我认为在累加器中,新元素已添加到结果大陆? 我尝试给组合器一个null值,但我得到了一个null指针异常。

  • 在我的项目中,电影和演员、电影和类别之间有着多对多的关系。当我尝试创建一部电影,然后尝试使用Select2添加演员和类别时,它不会列出可用的选项(输入字段看起来是灰色的,好像它们被锁定了)。我查看脚本是否正在加载,它们是否正在加载。这是我的密码。