Find the Best Cosmetic Hospitals

Explore trusted cosmetic hospitals and make a confident choice for your transformation.

โ€œInvest in yourself โ€” your confidence is always worth it.โ€

Explore Cosmetic Hospitals

Start your journey today โ€” compare options in one place.

DOTNET: Memory Optimization in .NET with ValueTask

Hereโ€™s a single, self-contained console app that lets you experience the difference between:

  • ๐Ÿšซ Without ValueTask โ€“ using async Task<int> (allocates a Task even on fast sync path)
  • โœ… With ValueTask โ€“ returning synchronously without allocating when value is cached

Youโ€™ll see timing + GC stats for both in the same run.


1๏ธโƒฃ Full Code โ€“ Program.cs


This is <strong>100% self-contained</strong> โ€“ no extra packages needed.Code language: HTML, XML (xml)

2๏ธโƒฃ Optional โ€“ Minimal .csproj

If you want to control the target framework explicitly, create ValueTaskDemo.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>
Code language: HTML, XML (xml)

You can switch to net9.0 or net10.0 if youโ€™re targeting .NET 9/10 SDK.


3๏ธโƒฃ Step-by-Step: How to Run It

Step 1 โ€“ Create a new console project

dotnet new console -n ValueTaskDemo
cd ValueTaskDemo
Code language: JavaScript (javascript)

Step 2 โ€“ Replace Program.cs

  • Open Program.cs in your editor
  • Delete everything
  • Paste the full code from section 1๏ธโƒฃ

(Optionally replace the generated .csproj with the file in 2๏ธโƒฃ.)

Step 3 โ€“ Build and run in Release mode

dotnet run -c Release

Youโ€™ll see output similar to:

=========================================
   ValueTask Demo โ€“ Task vs ValueTask    
=========================================

Iterations : 5,000,000
Cache size : 1,000
Scenario   : All calls hit the FAST (cached) path.

Warming up (small runs)...
--- Warmup โ€“ async Task<int> ---
Iterations        : 500,000
Time Elapsed      : 80 ms
GC Gen0           : 10
GC Gen1           : 0
GC Gen2           : 0
Managed Memory ฮ”  : 3.20 MB
Checksum (ignore) : 499500000

--- Warmup โ€“ ValueTask<int> ---
Iterations        : 500,000
Time Elapsed      : 45 ms
GC Gen0           : 3
GC Gen1           : 0
GC Gen2           : 0
Managed Memory ฮ”  : 0.70 MB
Checksum (ignore) : 499500000

=========== REAL TESTS (Release) ==========

--- WITHOUT ValueTask โ€“ async Task<int> ---
Iterations        : 5,000,000
Time Elapsed      : 800 ms
GC Gen0           : 100
GC Gen1           : 5
GC Gen2           : 0
Managed Memory ฮ”  : 30.50 MB
Checksum (ignore) : 4995000000

--- WITH ValueTask โ€“ ValueTask<int> ---
Iterations        : 5,000,000
Time Elapsed      : 430 ms
GC Gen0           : 15
GC Gen1           : 0
GC Gen2           : 0
Managed Memory ฮ”  : 5.10 MB
Checksum (ignore) : 4995000000
Code language: HTML, XML (xml)

(Exact numbers will vary per machine, but the pattern should be similar.)


4๏ธโƒฃ How to โ€œExperienceโ€ and Interpret the Results

Focus on these for each scenario:

  • โฑ Time Elapsed
  • ๐Ÿ—‘ GC Gen0 / Gen1 / Gen2
  • ๐Ÿ’พ Managed Memory ฮ”

๐Ÿ”ด Scenario 1 โ€“ WITHOUT ValueTask (async Task)

public async Task<int> GetValueAsync(int key)
{
    if (_cache.TryGetValue(key, out var value))
    {
        return value; // looks sync, but method is async
    }

    await Task.Delay(1).ConfigureAwait(false);
    return key;
}
Code language: JavaScript (javascript)

Even when the value is immediately available in cache, the compiler:

  • Generates an async state machine
  • Allocates a Task object for each call

In a tight loop with millions of calls, youโ€™ll see:

  • Higher Time Elapsed
  • More GC Gen0 collections
  • Higher Managed Memory ฮ” (more allocations)

๐ŸŸข Scenario 2 โ€“ WITH ValueTask (ValueTask)

public ValueTask<int> GetValueAsync(int key)
{
    if (_cache.TryGetValue(key, out var value))
    {
        return new ValueTask<int>(value); // completes synchronously, no Task allocation
    }

    return new ValueTask<int>(SlowPathAsync(key)); // real Task only on slow path
}
Code language: PHP (php)

Now:

  • For the fast path (cache hit), we:
    • Do not create a Task
    • Do not create a state machine
  • We only use a real Task<int> on the slow path (SlowPathAsync), which weโ€™re not hitting in this benchmark.

In the output, you should see:

  • Lower elapsed time (less allocation + less GC work)
  • Much fewer Gen0 collections
  • Smaller Managed Memory ฮ”

This is exactly the use case where ValueTask shines:
A method that is often synchronous but must expose an async API.


5๏ธโƒฃ Tweaks to Make the Effect More Visible

You can tune:

  • iterations (e.g., 10_000_000 if your machine is strong)
  • cacheSize (smaller cache keeps hit ratio at 100%)
const int iterations = 10_000_000;
const int cacheSize = 100;
Code language: JavaScript (javascript)

This increases the number of fast-path calls and magnifies the Task vs ValueTask difference.


Find Trusted Cardiac Hospitals

Compare heart hospitals by city and services โ€” all in one place.

Explore Hospitals
Iโ€™m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I have worked at <a href="https://www.cotocus.com/">Cotocus</a>. I share tech blog at <a href="https://www.devopsschool.com/">DevOps School</a>, travel stories at <a href="https://www.holidaylandmark.com/">Holiday Landmark</a>, stock market tips at <a href="https://www.stocksmantra.in/">Stocks Mantra</a>, health and fitness guidance at <a href="https://www.mymedicplus.com/">My Medic Plus</a>, product reviews at <a href="https://www.truereviewnow.com/">TrueReviewNow</a> , and SEO strategies at <a href="https://www.wizbrand.com/">Wizbrand.</a> Do you want to learn <a href="https://www.quantumuting.com/">Quantum Computing</a>? <strong>Please find my social handles as below;</strong> <a href="https://www.rajeshkumar.xyz/">Rajesh Kumar Personal Website</a> <a href="https://www.youtube.com/TheDevOpsSchool">Rajesh Kumar at YOUTUBE</a> <a href="https://www.instagram.com/rajeshkumarin">Rajesh Kumar at INSTAGRAM</a> <a href="https://x.com/RajeshKumarIn">Rajesh Kumar at X</a> <a href="https://www.facebook.com/RajeshKumarLog">Rajesh Kumar at FACEBOOK</a> <a href="https://www.linkedin.com/in/rajeshkumarin/">Rajesh Kumar at LINKEDIN</a> <a href="https://www.wizbrand.com/rajeshkumar">Rajesh Kumar at WIZBRAND</a> <a href="https://www.rajeshkumar.xyz/dailylogs">Rajesh Kumar DailyLogs</a>

Related Posts

Top 10 AI Code Generation for Scientific Computing Tools: Features, Pros, Cons & Comparison

Introduction AI Code Generation Tools for Scientific Computing combine artificial intelligence, machine learning, and programming assistance to help researchers, engineers, and scientists write, optimize, and maintain scientific…

Read More

Top 10 AI Computer-Aided Engineering Assistants: Features, Pros, Cons & Comparison

Introduction AI Computer-Aided Engineering (CAE) Assistants combine artificial intelligence, machine learning, automation, and engineering knowledge to help engineers improve design, simulation, analysis, and optimization workflows. These assistants…

Read More

Top 10 AI Materials Informatics Platforms: Features, Pros, Cons & Comparison

Introduction AI Materials Informatics Platforms combine artificial intelligence, machine learning, data analytics, and materials science to accelerate the discovery, development, and optimization of new materials. These platforms…

Read More

Top 10 AI CFD Acceleration Toolkits: Features, Pros, Cons & Comparison

Introduction AI CFD Acceleration Toolkits use artificial intelligence, machine learning, and scientific computing techniques to speed up Computational Fluid Dynamics (CFD) simulations. Traditional CFD simulations can require…

Read More

Top 10 Physics-Informed Neural Network (PINN) Frameworks: Features, Pros, Cons & Comparison

Introduction Physics-Informed Neural Network (PINN) Frameworks are AI and machine learning platforms designed to combine neural networks with mathematical equations, physical laws, and scientific constraints. Unlike traditional…

Read More

Top 10 AI Surrogate Modeling Tools: Features, Pros, Cons & Comparison

Introduction AI Surrogate Modeling Tools use artificial intelligence, machine learning, and statistical modeling techniques to create fast approximations of complex simulations, experiments, and computational processes. Instead of…

Read More
Subscribe
Notify of
guest
2 Comments
Newest
Oldest Most Voted
Skylar Bennett
Skylar Bennett
6 months ago

This blog clearly explains how using ValueTask can help optimize memory usage and improve performance in .NET applications, especially in high-throughput or asynchronous scenarios. It highlights when ValueTask is a better choice than Task and cautions readers about proper usage to avoid common pitfalls. The practical focus on reducing allocations and improving efficiency makes the content very relevant for developers building scalable and responsive systems. Overall, the article provides useful guidance for .NET professionals who want to make informed design decisions and write more performance-aware asynchronous code.

Jason Mitchell
Jason Mitchell
7 months ago

This article provides a very clear explanation of how ValueTask can significantly improve memory efficiency in .NET applications, especially in scenarios where asynchronous operations often complete synchronously. By reducing unnecessary heap allocations and lowering GC pressure, ValueTask becomes a powerful tool for developers working on high-performance or high-frequency code paths. I appreciate how the blog highlights not only the benefits but also the correct usage patterns, helping readers understand when ValueTask is appropriate and when a regular Task is still the better choice. Overall, this is a very practical and insightful guide for anyone looking to optimize memory usage and improve the responsiveness of their .NET applications.

2
0
Would love your thoughts, please comment.x
()
x