作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在创建一个执行图像处理的性能关键型应用程序。我正在使用名为 Pixel
的结构使用一些像素指针做一些处理。我有很多代码部分遍历整个位图数据,为了代码的可重用性和模块化,我正在设计一种方法,该方法将采取行动并将其应用于图像的所有像素(如 map 功能)。然而,当我写 Action<Pixel*>
Visual Studio 提示代码说类型 Pixel*
不能用作类型参数。全类都在unsafe
上下文,我正在使用 Pixel
指针无处不在,但我就是不能将像素指针用作 Action 的模板类。
我可以使用 Action<IntPtr>
但我需要在每次迭代中将其转换为方法体内的适当指针,这会扼杀“性能关键”的整个想法。
最佳答案
似乎没有什么强制你使用 Action<T>
,因此您可以创建自己的委托(delegate)类型。我没有想出一种通用的方法来做到这一点,但这很有效:
unsafe delegate void PixelAction(Pixel* ptr);
请记住,如果这确实对性能至关重要,那么调用委托(delegate)比直接调用方法要慢。也许另一种方法会更好,例如复制代码(如果这对您的情况有效)或代码生成,在编译时或运行时使用 Reflection.Emit 或 CodeDOM。
关于c# - 使用 Action<PointerClass*> 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046710/
我正在创建一个执行图像处理的性能关键型应用程序。我正在使用名为 Pixel 的结构使用一些像素指针做一些处理。我有很多代码部分遍历整个位图数据,为了代码的可重用性和模块化,我正在设计一种方法,该方法将
我是一名优秀的程序员,十分优秀!