我们注意到 Visual Studio c# 中的图像资源有一个奇怪的行为。
如果您将图像添加到项目资源并多次加载图像,您很快就会遇到内存不足的异常。
它只发生在某些系统上(在我测试的每一台 PC 上)。
复制:
- 创建 Windows 窗体项目
- 将图像添加到项目资源 (32x32 PNG)
- 创建一个包含 2000 个循环的 for 循环
在循环中将图像从资源填充到私有列表
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 上,每个测试系统都会出现内存泄漏。
有没有人注意到同样的奇怪行为?