MemStat.Net 0.1.4

dotnet add package MemStat.Net --version 0.1.4                
NuGet\Install-Package MemStat.Net -Version 0.1.4                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MemStat.Net" Version="0.1.4" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MemStat.Net --version 0.1.4                
#r "nuget: MemStat.Net, 0.1.4"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install MemStat.Net as a Cake Addin
#addin nuget:?package=MemStat.Net&version=0.1.4

// Install MemStat.Net as a Cake Tool
#tool nuget:?package=MemStat.Net&version=0.1.4                

MemStat.Net

Get memory statistics of a process in .NET

Features

  • Get total memory usage of a process
  • Get memory usage percentage of a process

it works on Windows, Linux and MacOS.

  • Windows : using GlobalMemoryStatusEx from kernel32.dll
    • Tested on Windows 11 and Azure App Service Windows Plan
  • Linux : using free command and parse it.
    • Tested on Azure App Service Linux Plan
  • MacOS : using vm_stat command and parse it.
    • Tested on macOS Sonoma

Usage

// you can add to DI container.
builder.Services.AddMemoryUsageFinder();

// Railway Oriented Programming way of using MemoryUsageFinder
app.MapGet(
    "/memoryusage",
    ([FromServices] IMemoryUsageFinder memoryUsageFinder) => memoryUsageFinder
        .ReceiveCurrentMemoryUsage()
        .Conveyor(_ => memoryUsageFinder.GetTotalMemoryUsage())
        .Combine(_ => memoryUsageFinder.GetMemoryUsagePercentage())
        .Remap((total, percent) => new MemoryInfo(total, percent))
        .Match(some => Results.Ok(some), error => Results.Ok(error.Message)));

internal record MemoryInfo(double TotalMemory, double MemoryUsagePercentage);


// Normal way of using MemoryUsageFinder
var memoryUsageFinder = serviceProvider.GetRequiredService<IMemoryUsageFinder>() ?? throw new InvalidOperationException("IMemoryUsageFinder is not registered");
memoryUsageFinder.ReceiveCurrentMemoryUsage();
var totalMemory = memoryUsageFinder.GetTotalMemoryUsage();
var memoryUsagePercentage = memoryUsageFinder.GetMemoryUsagePercentage();
// note : totalMemory and memoryUsagePercentage are in Result Type using ResultBox and double type.
if (totalMemory.IsSuccess)
{
   Console.WriteLine($"Total Memory : {totalMemory.GetValue()}");
}
if (memoryUsagePercentage.IsSuccess)
{
   Console.WriteLine($"Memory Usage Percentage : {memoryUsagePercentage.GetValue()}");
}

// you can also use it without DI
var memoryUsageFinder = new MemoryUsageFinder();
memoryUsageFinder.ReceiveCurrentMemoryUsage();
console.WriteLine(memoryUsageFinder.GetTotalMemoryUsage().UnwrapBox());
console.WriteLine(memoryUsageFinder.GetMemoryUsagePercentage().UnwrapBox());

// If you know you are using Windows, Linux or MacOS, you can use specific implementation.
var memoryUsageFinder = new WindowsMemoryUsageFinder();
// or var memoryUsageFinder = new LinuxMemoryUsageFinder();
// or var memoryUsageFinder = new MacOSMemoryUsageFinder();
console.WriteLine(memoryUsageFinder.GetTotalMemoryUsage().UnwrapBox());
console.WriteLine(memoryUsageFinder.GetMemoryUsagePercentage().UnwrapBox());

Before either GetMemoryUsagePercentage() or GetTotalMemoryUsage(), ReceiveCurrentMemoryUsage() must be called. GetMemoryUsagePercentage() returns 0 to 1 value. 1 means 100% memory usage. Sometime it may be more than 1.0. GetTotalMemoryUsage() returns total memory usage in bytes.

Installation

dotnet add package MemStat.Net
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on MemStat.Net:

Package Downloads
Sekiban.Core

Sekiban - Event Sourcing Framework Core

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on MemStat.Net:

Repository Stars
J-Tech-Japan/Sekiban
Sekiban - an Opinionated Event Sourcing and CQRS Framework using C#. It can store data into Azure Cosmos DB, AWS Dynamo DB or Postgres
Version Downloads Last updated
0.1.4 206 11/15/2024
0.1.3 123 11/15/2024
0.1.2 250 11/14/2024
0.1.1 189 10/26/2024
0.1.0 148 10/26/2024