解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
2.08 KiB
X
using BenchmarkDotNet.Attributes;
using NewLife.Compression;

namespace Benchmark.CompressionBenchmarks;

/// <summary>TarFile 读写性能基准</summary>
[MemoryDiagnoser]
[SimpleJob]
public class TarFileBenchmark
{
    private String _workDir = null!;
    private String _dataDir = null!;
    private Byte[] _archiveData = null!;

    [Params(8, 64)]
    public Int32 EntryCount { get; set; }

    [Params(1024)]
    public Int32 PayloadSize { get; set; }

    [GlobalSetup]
    public void Setup()
    {
        _workDir = Path.Combine(Path.GetTempPath(), $"tar-bench-{Guid.NewGuid():N}");
        Directory.CreateDirectory(_workDir);
        _dataDir = Path.Combine(_workDir, "data");
        Directory.CreateDirectory(_dataDir);

        var random = new Random(20260306);
        for (var i = 0; i < EntryCount; i++)
        {
            var name = i == EntryCount - 1
                ? $"{new String('a', 130)}-{i:D2}.bin"
                : $"f{i:D2}.bin";
            var file = Path.Combine(_dataDir, name);

            var data = new Byte[PayloadSize];
            random.NextBytes(data);
            File.WriteAllBytes(file, data);
        }

        var archiveFile = Path.Combine(_workDir, "sample.tar");
        TarFile.CreateFromDirectory(_dataDir, archiveFile);
        _archiveData = File.ReadAllBytes(archiveFile);
    }

    [GlobalCleanup]
    public void Cleanup()
    {
        if (!String.IsNullOrEmpty(_workDir) && Directory.Exists(_workDir))
            Directory.Delete(_workDir, true);
    }

    [Benchmark(Description = "读取Tar归档")]
    public Int32 ReadTar()
    {
        using var source = new MemoryStream(_archiveData, false);
        var tar = new TarFile();
        tar.Read(source);

        return tar.Entries.Count;
    }

    [Benchmark(Description = "读取并回写Tar归档")]
    public Int64 ReadWriteTar()
    {
        using var source = new MemoryStream(_archiveData, false);
        var tar = new TarFile();
        tar.Read(source);

        using var target = new MemoryStream(_archiveData.Length + 4096);
        tar.Write(target);

        return target.Length;
    }
}