繁体   English   中英

位图线程安全只读吗?

[英]Is Bitmap threadsafe for readonly?

CollectionBitmap对象。 在需要创建多发Tasks ,通过这一Collection的参数。 在任务方法中,我将读取每个Bitmap高度/宽度,然后将此Collection和height / width数组发送到Wcf服务。

那么它是线程安全操作吗? 在这种情况下我该怎么办?

并非如此,位图的行为根本不像“正常”对象。 对Bitmap对象的许多操作都涉及对Bitmap.LockBits()的基础调用。 您要做的简单事情,例如调用Save()方法或使用Graphics.DrawImage()绘制位图或臭名昭著的慢速GetPixel()方法,都需要锁定位图才能访问像素数据的内存映射视图。

您可能会认识到这些术语,.NET Framework中的MemoryMappedFile类公开了相同的低级操作系统功能。 对于位图很重要,它们可以包含大量数据。 通过使用MMF,可以将像素数据保留在页面文件之外,并从图像文件中将页面数据错误地复制回RAM中。

这有很多副作用,例如,它解释了程序员在发现映像文件已锁定且无法覆盖时遇到的常见问题。 MMF施加该锁定。 硬约束是位图只能锁定一次。 换而言之,只能同时对Bitmap对象执行一项重要操作。 因此,当另一个工作线程尝试使用相同的位图对象执行某项操作时,您的代码可能会随机崩溃,并且您没有添加所需的同步来防止这种情况的发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM