首页 > 后端开发 > C++ > 如何在C#中高效组合多个数组?

如何在C#中高效组合多个数组?

Barbara Streisand
发布: 2024-12-28 06:03:10
原创
793 人浏览过

How Can I Efficiently Combine Multiple Arrays in C#?

在 C 中有效组合数组的替代解决方案

提供的代码片段在将三个数组复制到单个三维数组时表现出缓慢的性能。以下是一些实现更快执行速度的替代解决方案:

利用 Buffer.BlockCopy

Buffer.BlockCopy 专为高速操作数组中的基本类型而设计。与 System.Array 中的类似方法相比,它提供了显着的性能改进。要使用 Buffer.BlockCopy,请按照以下步骤操作:

double[] sortedIndex, sortedInstances, sortedLabels;
double[,] leftnode = new double[sortedIndex.Length, 3];

// Copy sortedIndex into the first column of leftnode
Buffer.BlockCopy(sortedIndex, 0, leftnode, 0, sortedIndex.Length * sizeof(double));

// Copy sortedInstances into the second column of leftnode
Buffer.BlockCopy(sortedInstances, 0, leftnode, sortedIndex.Length * sizeof(double), sortedInstances.Length * sizeof(double));

// Copy sortedLabels into the third column of leftnode
Buffer.BlockCopy(sortedLabels, 0, leftnode, sortedIndex.Length * sizeof(double) + sortedInstances.Length * sizeof(double), sortedLabels.Length * sizeof(double));
登录后复制

利用 System.Buffer.memcpyimpl

为了获得最佳性能,您可以直接调用底层函数 System.Buffer.memcpyimpl由 Buffer.BlockCopy 使用。此方法需要指针,但针对最大速度进行了优化。但请注意,它仅对原始数组进行操作。

//assuming arrays of primitives and pointers are available
double[] sortedIndex, sortedInstances, sortedLabels;
double[,] leftnode = new double[sortedIndex.Length, 3];

unsafe
{
    fixed (double* pSortedIndex = &sortedIndex[0])
    fixed (double* pSortedInstances = &sortedInstances[0])
    fixed (double* pSortedLabels = &sortedLabels[0])
    fixed (double* pLeftnode = &leftnode[0, 0])
    {
        Buffer.memcpyimpl((byte*)pSortedIndex, (byte*)pLeftnode, sortedIndex.Length * sizeof(double));
        Buffer.memcpyimpl((byte*)pSortedInstances, (byte*)pLeftnode + sortedIndex.Length * sizeof(double), sortedInstances.Length * sizeof(double));
        Buffer.memcpyimpl((byte*)pSortedLabels, (byte*)pLeftnode + sortedIndex.Length * sizeof(double) + sortedInstances.Length * sizeof(double), sortedLabels.Length * sizeof(double));
    }
}
登录后复制

性能基准测试

根据经验,Buffer.BlockCopy 和 System.Buffer.memcpyimpl 表现出有竞争力的性能。它们之间的选择往往可以忽略不计。

以上是如何在C#中高效组合多个数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板