Unity之Burst测试

关于Burst,看下官方介绍:

Burst is a compiler that you can use with Unity's job system to create code that enhances and improves your application's performance.

It translates your code from IL/.NET bytecode to optimized native CPU code that uses the LLVM compiler.

可参考文档:https://docs.unity3d.com/Packages/com.unity.burst@1.8/manual/index.html

测试代码如下:

using System.Collections;
using System.Collections.Generic;
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
using UnityEngine;

public class TestBurst : MonoBehaviour
{
    void TestCount()
    {
        int sum = 0;
        for (int i = 0; i < 999999; i++)
        {
            sum += i;
        }
    }

    // Update is called once per frame
    void Update()
    {
        // 1. 耗时23ms
        /*
        for (int i = 0; i < 10; i++)
            TestCount();
        */

        // 2. 耗时0.03ms
        /*
        NativeArray<JobHandle> jobHandles = new NativeArray<JobHandle>(10, Allocator.Temp);
        for (int i = 0; i < 10; i++)
        {
            TestJob job = new TestJob();
            JobHandle handle = job.Schedule();
            jobHandles[i] = handle;
        }
        JobHandle.CompleteAll(jobHandles);
        jobHandles.Dispose();
        */

        // 3. 耗时0.009ms
        TestParalleJob jobs = new TestParalleJob();
        JobHandle jobHandle = jobs.Schedule(10,32);
        jobHandle.Complete();

    }
}

/*
Burst is a compiler that you can use with Unity's job system to create code that enhances and improves your application's performance. 
It translates your code from IL/.NET bytecode to optimized native CPU code that uses the LLVM compiler.
文档可参考:
https://docs.unity3d.com/Packages/com.unity.burst@1.8/manual/index.html
 */
[BurstCompile]
public struct TestJob : IJob
{
    public void Execute()
    {
        int sum = 0;
        for (int i = 0; i < 999999; i++)
        {
            sum += i;
        }
    }
}

[BurstCompile]
public struct TestParalleJob : IJobParallelFor
{
    public void Execute(int index)
    {
        int sum = 0;
        for (int i = 0; i < 999999; i++)
        {
            sum += i;
        }
    }
}

profiler截图如下:

执行第一段代码

 

执行第二段代码

 

 执行第三段代码

转载请注明出处:https://www.cnblogs.com/jietian331/p/17147659.html

posted @ 2023-02-23 13:42  孤独の巡礼  阅读(337)  评论(0编辑  收藏  举报