首页 > 其他分享 >Unity之Burst测试

Unity之Burst测试

时间:2023-02-23 13:58:12浏览次数:52  
标签:code Burst int sum Unity 测试 using

关于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/[email protected]/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/[email protected]/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

标签:code,Burst,int,sum,Unity,测试,using
From: https://www.cnblogs.com/jietian331/p/17147659.html

相关文章