Files
HybridRow/dotnet/src/HybridRow.Tests.Perf/Measurements.cs
2019-08-20 11:58:29 -07:00

90 lines
3.3 KiB
C#

// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// ------------------------------------------------------------
namespace Microsoft.Azure.Cosmos.Serialization.HybridRow.Tests.Perf
{
using System;
using System.IO;
using System.Text;
internal class Measurements : IDisposable
{
private static readonly long RunId = DateTime.UtcNow.Ticks;
private readonly FileStream file;
private readonly TextWriter writer;
public Measurements(string path)
{
FileInfo info = new FileInfo(path);
if (info.Exists)
{
this.file = new FileStream(path, FileMode.Append);
this.writer = new StreamWriter(this.file, Encoding.ASCII);
}
else
{
this.file = new FileStream(path, FileMode.CreateNew);
this.writer = new StreamWriter(this.file, Encoding.ASCII);
this.writer.WriteLine(
"RunId,Model,Operation,Schema,API,Iterations,Size (bytes),Total (ms),Duration (ms),Allocated (bytes),ThreadId,Gen0,Gen1,Gen2,Total Allocated (bytes)");
}
}
public void Dispose()
{
this.writer.Flush();
this.writer.Dispose();
this.file.Dispose();
}
public void WriteMeasurement(string model, string operation, string schema, string api,
int outerLoopIterations, int innerLoopIterations, long totalSize, double totalDurationMs,
int threadId, int gen0, int gen1, int gen2, long totalAllocatedBytes)
{
Console.WriteLine(
"RunId: {0}, \nModel: {1} \nOperation: {2} \nSchema: {3} \nAPI: {4}",
Measurements.RunId,
model,
operation,
schema,
api);
Console.WriteLine(
"\n\nIterations: {0} \nSize (bytes): {1:F0} \nTotal (ms): {2:F4} \nDuration (ms): {3:F4} \nAllocated (bytes): {4:F4}",
outerLoopIterations,
totalSize / outerLoopIterations,
totalDurationMs,
totalDurationMs / (outerLoopIterations * innerLoopIterations),
totalAllocatedBytes / (outerLoopIterations * innerLoopIterations));
Console.WriteLine(
"\n\nThread: {0} \nCollections: {1}, {2}, {3} \nTotal Allocated: {4:n0} (bytes)",
threadId,
gen0,
gen1,
gen2,
totalAllocatedBytes);
this.writer.WriteLine(
"{0},{1},{2},{3},{4},{5},{6:F0},{7:F8},{8:F8},{9:F8},{10},{11},{12},{13},{14:0}",
Measurements.RunId,
model,
operation,
schema,
api,
outerLoopIterations,
totalSize / outerLoopIterations,
totalDurationMs,
totalDurationMs / (outerLoopIterations * innerLoopIterations),
totalAllocatedBytes / (outerLoopIterations * innerLoopIterations),
threadId,
gen0,
gen1,
gen2,
totalAllocatedBytes);
}
}
}