使用指针操作Jobs示例

用指针传入Jobs操作对于外部类型为传统数据类型的集合来说效率是比较高的,以下是示例代码:

 

复制代码
using System;
using System.Runtime.InteropServices;
using Unity.Jobs;
using Unity.Burst;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;

public class TestClass : MonoBehaviour
{
    unsafe struct TestJob : IJobParallelFor
    {
        [NativeDisableUnsafePtrRestriction, NoAlias] public Vector3* vecs;

        public void Execute(int i)
        {
            vecs[i] = vecs[i] * 2f;
        }
    }

    private GCHandle mGCHandle;
    private Vector3[] mVectors;


    private void Start()
    {
        mVectors = new Vector3[4];
        Array.Fill(mVectors, Vector3.one);

        mGCHandle = GCHandle.Alloc(mVectors, GCHandleType.Pinned);

        unsafe
        {
            var vectorPtr = (Vector3*)mGCHandle.AddrOfPinnedObject().ToPointer();

            var job = new TestJob()
            {
                vecs = vectorPtr,
            };
            var jobHandle = job.Schedule(4, 2);
            jobHandle.Complete();
        }

        foreach (var item in mVectors)
        {
            Debug.Log(item);
        }//2,2,2...

        mGCHandle.Free();
    }

}
复制代码

 

posted @   HONT  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2016-01-02 Unity-Animator深入系列---录制与回放
2015-01-02 C++一次指针问题和解决(char指针乱码)
点击右上角即可分享
微信分享提示
回到顶部