0

NSubstitute用来模拟我的数据库调用以进行基准测试。对于我正在使用的基准测试BenchmarkDotNet。尽管在我的替代方法中没有分配内存,但我正在分配内存。我需要知道是什么导致了这种内存分配以及根据什么字节数计算出来的。

    [SimpleJob(RunStrategy.Monitoring, targetCount: 100)]
    [MemoryDiagnoser]
    [Orderer(SummaryOrderPolicy.FastestToSlowest)]
    public class PlayerHistory
    {  
        private static ILocalCache _localCache = Substitute.For<ILocalCache>();

        [GlobalSetup]
        public async Task Setup()
        {
            LocalCache.Instance.SetInstance(_localCache);
            Mock(); 
        }

      
        private void Mock()
        {
            LocalCacheController.Instance.GetRealLeagueGroupId("").ReturnsForAnyArgs(BenchmarkConstants.RealLeagueId);
        }

        [Benchmark]
        public async Task GetUsersInfoByUsers()
        {
            await TeamManager.Instance.GetPlayerHistory(BenchmarkConstants.RealLeagueId);
        }
    }

在我的 TeamManager 中:

    public async Task<string> GetPlayerHistory(string realLeagueId)
    {
        return LocalCacheController.Instance.GetRealLeagueGroupId(realLeagueId);      
    }

这是我的基准测试结果:

|              Method |     Mean |    Error |   StdDev |   Median | Gen 0 | Gen 1 | Gen 2 | Allocated |
|-------------------- |---------:|---------:|---------:|---------:|------:|------:|------:|----------:|
| GetUsersInfoByUsers | 63.66 us | 20.96 us | 61.79 us | 29.82 us |     - |     - |     - |     376 B |

你能告诉我为什么虽然我替换了该方法,但仍然分配了内存以及为什么它是如何计算的?

4

1 回答 1

0

我需要知道是什么导致了这种内存分配

为此,您需要使用 Memory Profiler。

并根据字节数计算。

https://adamsitnik.com/the-new-Memory-Diagnoser/

于 2022-02-21T12:39:03.677 回答