c# - 更改/访问矩阵元素的最佳/最快方法

标签 c# arrays performance matrix

我对 C# 很陌生,我在处理数组、数组数组、锯齿数组、矩阵等方面遇到了困难。它与 C++ 有很大不同,因为我无法使用指针和其他东西获得对矩阵行的引用(除非我使用不安全的代码)。

无论如何,问题是:我有一个名为“Image”的结构/类,它包含 1024 列和 768 行。每行/列都有一个包含 3 个字节的“像素”结构/类。我想尽快在矩阵的随机位置获取/设置像素。

假设我有一个 25 像素的矩阵。即 5 行 5 列,如下所示:

A B C D E
F G H I J
K L M N O
P Q R S T 
U V X W Y

我需要将 M 与 H 和 R 进行比较。然后将 M 与 L 和 N 进行比较。然后我需要对 G+H+I+L+M+N+Q+R+S 进行“求和”。

我怎样才能做到这一点?

可能性: 1)创建类似像素[5][5]的东西(这是一个锯齿状数组,对吧?),每当我尝试比较不同列上的元素时,它都会很慢,对吧? 2)创建类似 Pixel[25] 的东西,它不会那么容易编码/准备好,因为我需要对我想要访问元素的每个元素进行一些(简单的)数学运算 3)创建类似 pixe[5,5] 的东西(这是一个多维数组,对吧?)...但我不知道如何将其转换为实际内存...如果它将是一个 block 内存,比如 pixe[25],或者什么...

因为我打算对每个图像执行数万次此操作(不同行/列中的元素的“随机”求和/比较)。我有 1000 多张图像。代码优化是必须的.​​..遗憾的是我不确定应该使用哪种结构/类。

TL;DR:在(固定大小)矩阵的随机位置获取/设置元素的最快和最简单(编码方面)的方法是什么?

编辑:我不想将 C++ 与 C# 进行比较。我只是说我是 C# 新手,我想找到使用 C# 实现这一目标的最佳方法。请不要告诉我回到 C++。

最佳答案

我曾用 C# 进行基于像素的图像处理。我发现你列表中的模式#2 是最快的。为了速度,您必须忘记通过某种漂亮的抽象接口(interface)访问像素。像素处理例程必须明确处理图像的宽度和高度。一般来说,这会产生蹩脚的代码,但除非 Microsoft 改进 C# 编译器,否则我们就只能采用这种方法。

如果 for 循环从数组的索引 0 开始,并以 array.Length - 1 结束,编译器将优化数组索引边界测试。这很好,但通常在处理时您必须一次使用多个像素。

关于c# - 更改/访问矩阵元素的最佳/最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369479/

相关文章:

c# - 如何在 asp.net core 的字段中添加 swagger 示例?

c# - 从 MainViewModel 调用 ViewModel 的方法

php - 如何在不使 Apache 崩溃的情况下清除 APC 缓存?

c# - dotnet-run 命令未按预期工作

C# - 将 WPF Image.source 转换为 System.Drawing.Bitmap

PHP 从 mysqli_fetch_row 数组中排序结果

c - 仅在 C 中使用指针打印字符串数组

java - 将 double 数组中的一些元素复制到 double 数组列表

javascript - 如何检测客户端与nodejs中的redis断开连接?

python - 获取具有任何所需值的组