Задать вопрос
PragmaGames
@PragmaGames
Увлекаюсь Unity.

Как проверить выделение памяти в Unity c помощью unit теста?

Привет. Хочу написать тест для Unity. Не могу сообразить как получить данный сколько памяти было выделено.
[Test]
public void NaivePublishPerformanceTest()
{
    var eventBus = new EventBus();
    eventBus.Subscribe<CustomTestEvent>(CustomTestMethodHandler);
    var sw = Stopwatch.StartNew();

    for (int i = 0; i < 1000000; i++)
    {
        eventBus.Publish(new CustomTestEvent { Name = "Custom Event", Identifier = 1 });
    }

    sw.Stop();
    UnityEngine.Debug.Log($"Finished in {sw.ElapsedMilliseconds}ms");
    Assert.IsTrue(sw.Elapsed < TimeSpan.FromSeconds(1),
        $"NaivePublishPerformanceTest took {sw.ElapsedMilliseconds}ms");
    Console.WriteLine($"[DEBUG] NaivePublishPerformanceTest took {sw.ElapsedMilliseconds}ms");
}
private void CustomTestMethodHandler(CustomTestEvent customTestEvent)
{
    // Do nothing
}
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
AshBlade
@AshBlade
Просто хочу быть счастливым
1. Для тестирования выделения памяти нужно использовать dotMemory. У него есть отдельный плагин для всяких unit фреймвоков - https://blog.jetbrains.com/dotnet/2018/10/04/unit-...
Единственная проблема - она платная, а других аналогов мне не известно.
2. Нашел репозиторий с кодом для профилирования Unity, но последнее обновление 5 лет назад - https://github.com/donaldwuid/unitymemoryprofilert...
3. У самого Unity есть документация по профилированию памяти, но это не для юнит тестов, а для всего приложения - https://unity.com/how-to/analyze-memory-usage-memo...

Лично я не советую тестировать выделение памяти в юнит тестах. Память надо профилировать в рабочем приложении, когда запущено, собрать данные за несколько часов работы и только тогда станет понятно, какие места надо оптимизировать.
А так - уйдешь в микрооптимизации для кода, запускающегося раз за всю жизнь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы