我们注意到Visual Studio c#中的图像资源有一种奇怪的行为。
如果您将图像添加到项目资源并多次加载图像,很快就会出现内存不足的情况。
它只发生在某些系统上(我测试过的每一台PC)。
重现:
将图像从资源填充到私有列表
private List<image> _images = new List<image>();
private void ButtonClick(object sender, EventArgs e)
{
for (int i = 0; i < 2000; i++)
{
_images.Add(Properties.Resources.myImage);
}
}
每次运行循环时都会分配一些内存。 在健康的系统上,您可以执行此操作,直到达到2GB(32位应用程序)。
但在生病的系统上。该应用程序已经挂起200MB。
非常值得注意的是,sik系统不像健康系统那样分配相同的内存。 sik系统仅在循环的单个执行中分配大约一半的内存。 sik系统每个循环分配50MB。一个健康系统分配120MB。
系统完全相同。 Core I7,Windows7,12GB RAM,Visual Studio 2012。 在Windows8上,每个测试系统都会出现内存泄漏。
有没有人注意到同样的奇怪行为?
答案 0 :(得分:0)
我们发现了一些有趣的东西。
问题与Internet Explorer 10有关。 这也解释了为什么每个Windows8都出现泄漏
卸载IE10没有帮助。 如果您卸载Windows Update KB2670838,则会有所帮助。
顺便说一下...... 此代码具有相同的问题。
Image.FromFile("myImage.png");
所以问题是在GDI +中而不是在ResourceManager中。