.NET 4.6 之前的 Buffer.MemoryCopy 的替代方案

2024-01-03

我正在尝试将一些 .NET 4.6 代码降级到 .NET 4.5。

这是我目前正在使用的代码块:

fixed (byte* destination = dataBytes)
{
    Buffer.MemoryCopy(data, destination, dataLength, dataLength);
}

data is byte*输入所以我不知道是否Buffer.BlockCopy()是一个合理的替代品,因为它接受数组。

有任何想法吗?


你是对的Buffer.MemoryCopy是 .Net 4.6 或更高版本,Buffer.BlockCopy没有所需的过载,并且Array.Copy也是不可能的。

您可以使用以下命令,但速度会很慢

fixed (byte* pSource = source, pTarget = target)
    for (int i = 0; i < count; i++)
        pTarget[targetOffset + i] = pSource[sourceOffset + i];

如果所有其他方法都失败,您可以从 msvcrt.dll 调用 memcpy

[DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);

同样对于 .Net 4.5,您可以使用System.Runtime.CompilerServices.Unsafe https://www.nuget.org/packages/System.Runtime.CompilerServices.Unsafe/

Unsafe.CopyBlock 方法 https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.unsafe.copyblock?view=dotnet-plat-ext-2.1

CopyBlock(Void*, Void*, UInt32)

从 1 复制指定为长整数值的多个字节 内存中的地址到另一个。


最后,您可以使用Marshal.Copy https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.copy?view=netframework-4.7.2如果你不介意以数组结束。但是它没有指向指针重载的指针。

将数据从托管数组复制到非托管内存指针,或者 从非托管内存指针到托管数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 4.6 之前的 Buffer.MemoryCopy 的替代方案 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • JSON 序列化列表>

    我在 Web API 项目中使用了字典 它的序列化类似于 JSON 中的序列化 keyname objectvalue keyname2 由于我有重复的键 我无法再使用字典类型 现在我正在使用List
  • 无法从 MonoTouch 程序中表示崩溃日志

    我有一个 MonoTouch 应用程序 我在调试中构建并上传到设备 我在调试器中运行该应用程序 但该应用程序死了 而调试器没有捕获任何内容 我有一个 crash 日志 我跑 symbolicatecrash myapp crash myap
  • 单击按钮后更改 ImageView 源一段时间

    我有两个按钮和一个图像视图
  • 当声音在 AVAudioPlayer 中播放完毕时执行操作吗?

    我正在使用 AVAudioPlayer 框架 并且我有几种声音一次播放一种 当声音播放完毕后 我希望应用程序执行一些操作 我尝试使用audioPlayerDidFinishPlaying 在第一个声音结束时执行操作 但我无法将其用于第二个声
  • 如何在 Flutter 中将数据从 showmodalbottomsheet 传递到上一页

    我如何传递数据showmodalbottomsheet到上一页 下面是示例代码 我尝试过的是 当我单击它时 有一个按钮显示 modalbottomsheet 当我单击 完成 按钮时 它应该通过1值到上一页 我还添加了setState on
  • Twitter Bootstrap:减少编译时间

    我正在使用 Twitter Bootstrap 编写一个简单的应用程序 在我的主 HTML 文件中 有以下几行 所以每次刷新页面时 都会生成整个 css 每次大约需要 15 秒 所以等待页面加载是一件痛苦的事情 我尝试使用 SimpLESS
  • Omniauth-facebook 登录不起作用

    我克隆了Facebook 集成示例 https github com AnnieLee blog facebook 这个 repo 可以了解omniauth facebook 是如何工作的 我从我的 Facebook 应用程序设置了自己的
  • ios 模拟器在 xcode 6 中出现并带有 UDID

    当我从 xcode 6 选择模拟器时 我会得到多个选择模拟器的选项 但模拟器带有 UDID 请看下面的图片并请帮帮我 提前致谢 killall Xcode Kills all running Xcode processes sudo kil
  • 如何用Python编写下载进度指示器?

    我正在编写一个小应用程序来通过 http 下载文件 例如 所描述的here https stackoverflow com questions 22676 how do i download a file over http using p
  • Cucumber-jvm @after 与 Appium 驱动程序

    我在用着cucumber jvm 并努力在全球范围内实施 After应该执行的方法只有一次所有场景执行完成后 这 After方法应该退出appium驱动程序 现在 After钩子在之后执行each运行场景 这意味着每次都应该从头开始创建驱动
  • jQuery 上的 trigger('click') 和 click() 有什么区别

    我正在寻找这两者之间的性能差异 我在 SSE 中找不到关于这个主题的好的答案 一些例子会有很大帮助 如果你查看 jQuery 代码 你会发现所有click does 是执行trigger click jQuery each blur foc
  • 使用 scala 和 GAE 玩框架

    有谁知道如何让 Play 框架的 scala 版本在 Google App Engine 中运行 此时我只是尝试让默认应用程序运行 我正在使用带有 gae 1 4 和 scala 0 9 1 模块的 Play 1 2 2 我创建了一个默认应
  • 如何在特征值中转置张量

    我试图获得两个张量的矩阵乘积 其中一个张量应该在相乘之前转置 At B 到目前为止我发现的是没有任何转置和两个矩阵转置的矩阵乘积 我正在寻找一种方法 可以直接收缩两个张量并转置其中一个张量 或者在收缩一个张量之前转置一个张量 我发现 转置效
  • 使用 C# 通过数据库中存储的文件路径在 Crystal Reports 10 中显示图像

    我有一个 C Windows 应用程序 它将员工数据存储到 MYSQL 数据库中 包括他们的图片文件路径 192 168 13 6 IDPictures Unknown jpg 有人可以帮助我如何通过从数据库读取文件路径来显示 Crysta
  • php preg_replace 匹配字符串但仅替换其中的一部分

    我有这样的文字 Retailer ul Amazon foloseste metode severe pentru a si descuraja etc angajatii din depozite sa nu mai fure din p
  • 使用 SELECT 结果作为其他 SELECT 中的 COLUMN 名称

    是否可以使用选择的结果作为字符串与其他选择中列名中的另一个字符串连接 Example SELECT brand FROM articles a WHERE a id 12345678 结果 BRAND A 我现在想要连接 PRICE to
  • 如何使用 LoadImage 和 StretchDIBits 绘制 PNG 图像?

    这与问题有关如何使用 Win32 GDI 加载 PNG 图像 如果可能 不要使用 GDI https stackoverflow com questions 4567875 how would i load a png image usin
  • 从 PyQt GUI 类外部访问 GUI 元素 text( )

    Ui MainWindow 是由设计器和 pyuic 生成的 py 文件 我想将 PyQt GUI 元素文本值传递到另一个文件并执行一些基本操作并返回结果 父文件 from PyQt4 import QtCore QtGui try fro
  • 将 SQL 查询替换为 LINQ 查询

    我有SQL检查今天的查询 根据表中存储 3 个字母字符的字段进行检查 如下所示 如果今天是星期二我需要归还记录 我有这样的 SQL 查询 SELECT TOP 1 EndTime StartTime OrderDay FROM dbo Se
  • .NET 4.6 之前的 Buffer.MemoryCopy 的替代方案

    我正在尝试将一些 NET 4 6 代码降级到 NET 4 5 这是我目前正在使用的代码块 fixed byte destination dataBytes Buffer MemoryCopy data destination dataLen