c# - 从浮点数组中获取字节而不进行分配(即通过强制转换)
问题描述
我有一个相当大的浮点数组(通常 > 4000 万个条目),它占用 150MB 到 250MB 的内存,我需要将它传递给两个不同的 API。两者都是我无法更改的第三方工具。其中一个只接受 byte[],另一个只接受 ref float[]。
使用 Buffer.BlockCopy 或类似方法将其转换为 byte[] 对我来说不是问题。但是由于内存碎片分配这个大小的数组经常失败,我想尽可能避免复制它。
有什么办法可以做到这一点吗?也许使用不安全的代码或 C++ cli 或 C++ 或所有它们的组合?或者也许使用 MemoryMappedFile?我已经尝试了所有这些,但到目前为止没有任何成功。
解决方案
如果我正确理解了您的问题,则如下所示:
GCHandle handle = GCHandle.Alloc(myObject, GCHandleType.Pinned);
try
{
IntPtr myPinnedPointer = handle.AddrOfPinnedObject();
// use myPinnedPointer for your needs
}
finally
{
handle.Free();
}
推荐阅读
- mysql - 如何在字符串-> true 之前查找字符串?
- amazon-web-services - 如何启动具有更大默认临时存储的 Fargate pod?
- arrays - 如何在 Azure 数据工厂管道中直接转换 JSON 文件数据
- javascript - 单击传单地图js时如何在标记上动态添加缩放
- google-sheets - 需要总结一个单元格中的值,这些值由谷歌表格中的“加法”符号分隔
- html - 如何强制嵌入地图留在容器中?
- css - 如何在 laravel 8 布局中链接 css 文件并禁用基本刀片 css?
- sql - SQL Server 中的 CONCAT 与 CASE WHEN 故障排除
- django - 更改 CreateView 中的模型取决于 django 中的用户
- reactjs - 在 React 子组件中触发多个 POST 请求