ZLogger icon indicating copy to clipboard operation
ZLogger copied to clipboard

Why I can't achieve 0 GC or even generate a lot of GCs From Unity?

Open YangLingCloud opened this issue 6 months ago • 2 comments

Use ZString And ZLogger In Unity

Image

In comparison, UnityLogger GC is much lower

var loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.SetMinimumLevel(LogLevel.Debug);
            
            #if UNITY_EDITOR
            builder.AddZLoggerUnityDebug();
            #endif
            
            builder.AddZLoggerFile(zStringbuilder.ToString(), options => { options.UseJsonFormatter(); });
        });

        logger = loggerFactory.CreateLogger<SerializeSample>();

        using (var filePath = ZString.CreateUtf8StringBuilder())
        {
            filePath.AppendFormat("{0}{1}.bytes", FileNameBuilder, syncDataSaveCount);
            logger.ZLogInformation($"{filePath}");
        }


        using (var logString = ZString.CreateUtf8StringBuilder())
        {
            logString.AppendFormat("SaveSyncDataFromMemoryPack : {0} ", stopwatch.ElapsedMilliseconds);
            Debug.unityLogger.Log($"{logString}");
        }

YangLingCloud avatar Jun 03 '25 10:06 YangLingCloud

@MutualFunGames is the profiler snapshot taken from device of unity editor? if its from the editor i suggest comparing on device.

freemason79 avatar Jun 18 '25 19:06 freemason79

@freemason79 Thanks, here's a test I did on WindowsRuntime

zlogger:

Image

Debug.UnityLogger.Log:

Image

then this is my code

public class Launcher : MonoBehaviour
{
    private ILogger<Launcher> SampleLogger;

    private Utf8ValueStringBuilder SampleUtf8StringBuiler;
    
    public GameObject sampleGameObject;
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    async UniTaskVoid Start()
    {
        var loggerFactory = LoggerFactory.Create(logging =>
        {
            logging.SetMinimumLevel(LogLevel.Trace);
            logging.AddZLoggerUnityDebug(); // log to UnityDebug
        });

        SampleLogger = loggerFactory.CreateLogger<Launcher>();
        
        SampleUtf8StringBuiler = ZString.CreateUtf8StringBuilder(true);
        SampleUtf8StringBuiler.AppendFormat("Hello,{0}",nameof(Launcher));
        SampleLogger.ZLogInformation($"{SampleUtf8StringBuiler}");
    }

    // Update is called once per frame
    async UniTaskVoid Update()
    {
        SampleUtf8StringBuiler.Clear();
        //比较尴尬的问题,如果不等待直接Log,会发现没有获取到时间
        SampleUtf8StringBuiler.AppendFormat("Game Running Time : {0}",Time.time);
        await UniTask.WaitForEndOfFrame();
        SampleLogger.ZLogDebug($"{SampleUtf8StringBuiler}");
        //Debug.unityLogger.Log($"{SampleUtf8StringBuiler}");
        
        sampleGameObject.transform.RotateAround(Vector3.back, 3*Time.deltaTime);
    }
}

and packages version

Image

YangLingCloud avatar Jun 22 '25 10:06 YangLingCloud

This issue is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 30 days.

github-actions[bot] avatar Dec 20 '25 00:12 github-actions[bot]