ZeroAlloc.Cache 0.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package ZeroAlloc.Cache --version 0.0.1
                    
NuGet\Install-Package ZeroAlloc.Cache -Version 0.0.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="ZeroAlloc.Cache" Version="0.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ZeroAlloc.Cache" Version="0.0.1" />
                    
Directory.Packages.props
<PackageReference Include="ZeroAlloc.Cache" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ZeroAlloc.Cache --version 0.0.1
                    
#r "nuget: ZeroAlloc.Cache, 0.0.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.
#:package ZeroAlloc.Cache@0.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ZeroAlloc.Cache&version=0.0.1
                    
Install as a Cake Addin
#tool nuget:?package=ZeroAlloc.Cache&version=0.0.1
                    
Install as a Cake Tool

ZeroAlloc.Cache

Source-generated zero-allocation caching proxy from an annotated interface.

Add [Cache] to an interface and a Roslyn source generator emits a proxy class that transparently intercepts every method call, returning a cached result on hit with no heap allocation on the cache-hit path. Backed by IMemoryCache by default, with optional HybridCache (L1 + L2) opt-in per method. AOT-safe.

NuGet


Quick start

dotnet add package ZeroAlloc.Cache
[Cache(TtlMs = 60_000)]
public interface IProductRepository
{
    ValueTask<Product?> GetByIdAsync(int id, CancellationToken ct);

    [Cache(TtlMs = 300_000, MaxEntries = 1_000)]
    ValueTask<IReadOnlyList<Product>> SearchAsync(string query, CancellationToken ct);
}

// Register — one line wires everything
builder.Services.AddIProductRepositoryCache<ProductRepositoryImpl>();

Inject IProductRepository anywhere — caching is transparent to the caller.

public class ProductsController(IProductRepository repo)
{
    public async Task<Product?> Get(int id, CancellationToken ct)
        => await repo.GetByIdAsync(id, ct); // cache hit = zero allocation
}

Features

Feature Notes
Zero allocation on cache hit Key is built at compile time; no boxing, no string interpolation at runtime
IMemoryCache (default) In-process L1 cache; no extra dependencies
HybridCache (opt-in) L1 + L2 distributed cache via Microsoft.Extensions.Caching.Hybrid
Method-level override Any [Cache] on a method shadows the interface-level config for that method
MaxEntries Isolates the method in its own MemoryCache instance with a SizeLimit
Compile-time key Cache key expression is emitted by the generator — zero key-building overhead on hit
AOT / trimmer safe Generated proxy is concrete; no reflection at runtime
DI integration Generated Add{IService}Cache<TImpl>() extension registers everything

Cache behavior

Scenario Behavior
Miss Inner implementation is called; result is stored in cache with the configured TTL; result is returned
Hit Cached value is returned directly; inner implementation is never invoked; no heap allocation

Diagnostics

ID Severity Description
ZC0001 Warning Sliding = true combined with UseHybridCache = true — sliding TTL is silently ignored by the distributed (L2) tier
ZC0002 Warning A cache key parameter is a reference type (excluding string) — ToString() may not produce a stable unique key

Documentation

Full docs live in docs/:


License

MIT

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.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
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 ZeroAlloc.Cache:

Package Downloads
ZeroAlloc.Mediator.Cache

Pipeline behavior that caches IRequest<T> responses when the request type carries [Cache]. Zero-alloc key derivation via interpolated strings on value-type requests.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.2 35 5/20/2026
1.1.1 93 5/18/2026
1.1.0 93 5/13/2026
1.0.5 93 5/12/2026
1.0.4 95 5/12/2026
1.0.3 110 5/9/2026
1.0.2 95 5/7/2026
1.0.1 93 5/6/2026
1.0.0 95 5/4/2026
0.0.1 405 4/21/2026