Console.WriteLine和内存泄漏

5
我正在尝试减少一个控制台应用程序的内存使用。它应该持续运行数小时,但是似乎每秒钟内存使用量都在逐渐增加。这个程序使用了多个线程并做了各种事情,但我读到某个地方说,频繁调用Console.WriteLine也会导致内存峰值。
因为应用程序不断向控制台写入,我想也许内存使用率是由此导致的。不幸的是,我无法轻松清除控制台,因为我正在将输出重定向到一个监视窗口。我已经暂时关闭了它,但内存仍在增加,这告诉我还有其他问题需要解决。
在我开始查找内存泄漏之前,我想知道是否有人能够证实/验证是否拥有数千个Console.WriteLine可能会导致内存泄漏,或者是否已经通过重定向输出缓冲区适当地处理了这个问题。我曾尝试进行搜索,但没有找到太多相关内容。

1
你认为你看到的是内存泄漏的原因是什么?内存使用量可能会增加,直到有足够的压力来进行垃圾回收;这取决于你的代码和它运行的环境,可能需要很长时间。每秒泄漏多少内存,应用程序在做什么?Console.WriteLine不应该消耗比缓冲区中消息占用更多的内存,除非我漏掉了什么... - Dan Puzey
1
https://dev59.com/tXRC5IYBdhLWcg3wJNcN - spender
1个回答

5
拥有成千上万个对Console.WriteLine的调用并不会导致内存泄漏。我有一个长时间运行的程序(已经运行了6个月),每分钟向控制台写入几百行,但它的内存使用量保持稳定。
尽管偶尔一次性写入数千行可能会因为临时字符串而导致内存峰值,但这些将在下一次GC运行时被收集。但是频繁地使用Console.WriteLine只会导致未收集的字符串的稳定内存负载。它不会不断增加。

3
实际上,这并不总是正确的。虽然Console.WriteLine是线程安全的,但如果您从多个线程调用它,则会出现句柄泄漏,导致其他线程上的事件/信号量无法关闭。我已在Win2003 .NET 4上验证过这一点,但尚未尝试其他平台。 - Brain2000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接