作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个关于 .Net CLR GC 的介绍性演示,并且拥有所有不同的部分,但我想要一个具体的例子来说明尝试强制收集可能是危险或有害的。我知道你可以过早地把事情强加给更高的世代,但是(据我所知)这实际上只会减慢事情的速度。
我正在尝试考虑一种情况,在这种情况下,强制 GC 可能会造成真正的破坏,并且我不断提出一些效率较低的解决方案。
最佳答案
这是一个有趣的演示。请注意,您应该运行在 Release模式下编译的此演示,否则它可能无法像宣传的那样工作。
版本 1:
private void Button_Click(object sender, EventArgs e)
{
Timer timer = new Timer(Print, null, 0, 1000);
}
private void Print(Object o)
{
if (textBox1.InvokeRequired)
{
Action<object> action = Print;
textBox1.Invoke(action, o);
return;
}
textBox1.Text = DateTime.Now.ToString();
}
版本 1 会每秒将日期和时间打印到文本框一次。
版本 2:
private void Button_Click(object sender, EventArgs e)
{
Timer timer = new Timer(Print, null, 0, 1000);
}
private void Print(Object o)
{
if (textBox1.InvokeRequired)
{
Action<object> action = Print;
textBox1.Invoke(action, o);
return;
}
textBox1.Text = DateTime.Now.ToString();
GC.Collect(); // force a garbage collection
}
现在在版本 2 中,日期和时间只会打印一次,因为在声明之后,不再有对计时器对象的引用,因此计时器对象被收集。
这是一个相当人为的示例,但可能会成为一个很好的演示。
我必须将此归功于 Jeffery Richter - 这是他的优秀著作CLR via C#
。
关于.net - 强制 GC 变坏的示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619501/
我是一名优秀的程序员,十分优秀!