Rik*_*kon 8 .net clr garbage-collection
我正在关于.Net CLR GC进行介绍,并且有各种各样的部分,但我想要一个特别的例子,说明如何强制收集可能是危险的或有害的.我知道你可以过早地将事情强加给更高代人,但是(从我能说的话)这实际上只会减慢事情.
我正在考虑一种强迫GC可能真正具有破坏性的情况,而且我一直在努力解决这个问题.
这是一个有趣的演示。请注意,您应该运行在发布模式下编译的此演示,否则它可能无法像宣传的那样工作。
版本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();
}
Run Code Online (Sandbox Code Playgroud)
版本 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
}
Run Code Online (Sandbox Code Playgroud)
现在在版本 2 中,日期和时间只会打印一次,因为在声明之后,不再有对计时器对象的引用,因此计时器对象被收集。
这是一个相当人为的例子,但可能会成为一个很好的演示。
我必须将此归功于杰弗里·里克特(Jeffery Richter)——这是在他的优秀著作中CLR via C#。
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |