none
设置Panel的背景图片系统提示虚拟内存不足 RRS feed

  • 问题

  • 机器是512M的内存,关闭了页面文件 ,C盘总共1G剩余空间100M,系统XPE

    我在Panel控件中设置其背景图片为一个10M的JPG图片,Panel控件直接就变白色,然后背景出现个红色的叉,系统提示虚拟内存不足?

    512M的内存怎么还会提示虚拟内存不足呢?后面我换成一个2G的内存上去 设置背景为30M的都没问题 。这是为什么呢?

    2011年1月13日 3:30

答案

  • 关于内存不足的问题,已经在这里讨论过多次,有时候系统报告的内存不足,不是真正的物理内存耗尽,而是某些特定框架的托管堆已满。比如 .NET。

    在一个比较大的内存的机器上,其托管堆上的各个 Generation,比如 G0、G1 和 G2 以及大对象堆 (BLOB Heap) 均可以被分到足够大的内存空间。然而,在一些硬件资源极其有限的情况下,G2 和 BLOB Heap 的大小可能不足 10 MB,这样,当一个 .NET 托管程序请求一个 10 MB 大小的资源时,虽然系统还有足够的内存来加载这个资源,然而,托管堆上并没有足够的连续空间来储存它,此时,CLR 会进行一次强迫垃圾回收,以释放一些连续空间;如果再这次垃圾回收之后仍然没有足够的连续空间存放这个大对象到 BLOB Heap 上,那么,就会引发 System.OutOfMemoryException。

    CLR 会根据机器硬件资源的情况调整各个 Generation 的大小,这也就是为什么 2GB 内存的机器没有发现这个问题的原因。

    PS:PPT 没有出问题是因为 PPT 的核心处理引擎是本地代码实现的,而不是托管代码。因此不受此限制。另外,PPT 会默认把所有内容做 GZip 压缩的。

    希望这个解释对您有帮助。


    Mark Zhou
    • 已标记为答案 net021 2011年1月13日 16:17
    2011年1月13日 9:36

全部回复

  • 因为你内存小,而且关闭了页面文件。
    2011年1月13日 5:08
  • 512M内存开10M的图片还不够吗?
    2011年1月13日 7:41
  • 够不够操作系统不是告诉你了吗。

    10m的图片,一般jpg压缩率是10%所以在内存中是100MB,然后经常是内存中有多份拷贝起码就要200MB。。net还要内存,操作系统也要内存。

    2011年1月13日 8:00
  • 那么夸张?太恐怖了 但是那个大图片我嵌入PPT再打开怎么就没问题呢  很奇怪 难道有某种压缩算法?
    2011年1月13日 8:03
  • 关于内存不足的问题,已经在这里讨论过多次,有时候系统报告的内存不足,不是真正的物理内存耗尽,而是某些特定框架的托管堆已满。比如 .NET。

    在一个比较大的内存的机器上,其托管堆上的各个 Generation,比如 G0、G1 和 G2 以及大对象堆 (BLOB Heap) 均可以被分到足够大的内存空间。然而,在一些硬件资源极其有限的情况下,G2 和 BLOB Heap 的大小可能不足 10 MB,这样,当一个 .NET 托管程序请求一个 10 MB 大小的资源时,虽然系统还有足够的内存来加载这个资源,然而,托管堆上并没有足够的连续空间来储存它,此时,CLR 会进行一次强迫垃圾回收,以释放一些连续空间;如果再这次垃圾回收之后仍然没有足够的连续空间存放这个大对象到 BLOB Heap 上,那么,就会引发 System.OutOfMemoryException。

    CLR 会根据机器硬件资源的情况调整各个 Generation 的大小,这也就是为什么 2GB 内存的机器没有发现这个问题的原因。

    PS:PPT 没有出问题是因为 PPT 的核心处理引擎是本地代码实现的,而不是托管代码。因此不受此限制。另外,PPT 会默认把所有内容做 GZip 压缩的。

    希望这个解释对您有帮助。


    Mark Zhou
    • 已标记为答案 net021 2011年1月13日 16:17
    2011年1月13日 9:36