性能局部性如何影响实验观察结果?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2736个文字,预计阅读时间需要11分钟。
同样的算法,为什么会有数量级的性能差异?问题起源于几个月前与一位网友的探讨。这位网友在写婚纱照拼接程序。一般来说,婚纱照的图像都比较大,至少几千万像素。
同样的算法,为什么会有数量级的性能差异?问题起源于几个月前与一位网友的探讨。这位网友在写婚纱抠图程序。一般来说,婚纱摄影的图像都较大,甚至大至几千万像素。这位网友使用C#开发,他的问题就在于性能。当时建议他使用XNA开发,但问题又出来了:加载一副图像的时间竟需要好几秒!而我自己写的C#加载几千万像素图像及图像转换操作,都是瞬间完成。为什么会有如此大的差别呢?这就是本文要说的。
问题主要处在程序的局部性和缓存命中上。我们把图像类抽象一下:
Bitmap
{
Width,Height;
Data;
}
一般来说,它在内存中被分为两块存放:
程序会分配一大块内存,存储具体的图像数据,然后再为Bitmap分配小块内存,储存Width、Height及对图像数据的引用。
本文共计2736个文字,预计阅读时间需要11分钟。
同样的算法,为什么会有数量级的性能差异?问题起源于几个月前与一位网友的探讨。这位网友在写婚纱照拼接程序。一般来说,婚纱照的图像都比较大,至少几千万像素。
同样的算法,为什么会有数量级的性能差异?问题起源于几个月前与一位网友的探讨。这位网友在写婚纱抠图程序。一般来说,婚纱摄影的图像都较大,甚至大至几千万像素。这位网友使用C#开发,他的问题就在于性能。当时建议他使用XNA开发,但问题又出来了:加载一副图像的时间竟需要好几秒!而我自己写的C#加载几千万像素图像及图像转换操作,都是瞬间完成。为什么会有如此大的差别呢?这就是本文要说的。
问题主要处在程序的局部性和缓存命中上。我们把图像类抽象一下:
Bitmap
{
Width,Height;
Data;
}
一般来说,它在内存中被分为两块存放:
程序会分配一大块内存,存储具体的图像数据,然后再为Bitmap分配小块内存,储存Width、Height及对图像数据的引用。

