MemStat.Net
0.1.1
dotnet add package MemStat.Net --version 0.1.1
NuGet\Install-Package MemStat.Net -Version 0.1.1
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.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MemStat.Net --version 0.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: MemStat.Net, 0.1.1"
#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.1 // Install MemStat.Net as a Cake Tool #tool nuget:?package=MemStat.Net&version=0.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
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
fromkernel32.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 | Versions 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- ComputerInfo (>= 0.2.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.VisualBasic (>= 10.3.0)
- ResultBoxes (>= 0.3.26)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.