mirror of
https://github.com/microsoft/HybridRow.git
synced 2026-01-22 02:43:07 +00:00
90 lines
3.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|