【问题标题】:C# modifying array to change the starting positionC#修改数组以改变起始位置
【发布时间】:2021-06-05 00:44:32
【问题描述】:

我有一个在数组上工作的函数,前 4 个字节是为指令保留的。操作后,结果从索引 3 到末尾。我目前正在创建另一个数组并从元素 4 复制到末尾。

有没有办法修改数组(可能使用不安全的代码)以更改起始位置/调整大小?这将消除复制和分配并大大提高性能。 有 Array.Resize,但这不是我要找的。​​p>

【问题讨论】:

  • 这个问题没有解释here,它说:“从指定的源索引开始复制数组中的一系列元素并将它们粘贴到从指定目标索引开始的另一个数组。长度和索引指定为 64 位整数。” ?
  • 或者,我错过了什么吗?删除前 3 个元素会提高性能吗?
  • 技术上可以使用不安全代码通过指针访问数组。在这一点上,问题应该是,C# 是你应该使用的语言吗?
  • @Luuk 我想避免复制,这是我目前正在做的。
  • @Vulpex 没有别的办法,这集成到一个 c# 框架中。我实际上可能能够破解它,因为数据是字符串,所以我可以实现使用索引的 base64 转换。

标签: c# arrays optimization


【解决方案1】:

您可以使用Span<T> 表示数据而无需复制数组。

var testData = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
var result = new Span<byte>(testData).Slice(3);
//result -> {3, 4, 5, 6, 7, 8, 9, 10}

https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp-all-about-span-exploring-a-new-net-mainstay

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 2023-01-20
    相关资源
    最近更新 更多