Skip to content

Instantly share code, notes, and snippets.

@mdubey82
Created June 13, 2023 07:14
Show Gist options
  • Save mdubey82/d5ccb5fe0cd0fd982cf98d36ee96f224 to your computer and use it in GitHub Desktop.
Save mdubey82/d5ccb5fe0cd0fd982cf98d36ee96f224 to your computer and use it in GitHub Desktop.
BlazorWasm out of memory MRE
@inject IJSRuntime jsRuntime;
<h1>Out of memory test.</h1>
<p role="status">Buffer collection count: @_collectionCount</p>
<button class="btn btn-primary" @onclick="CreateBuffer">Create Buffer</button>
<button class="btn btn-primary" @onclick="CreateBufferFromJs">Create Buffer From Js</button>
<button class="btn btn-primary" @onclick="DestroyBuffer">Destroy Buffer</button>
@code {
private int _collectionCount = 0;
private List<BufferHolder> _bufferHolders = new List<BufferHolder>();
private int _bufferLength = 5 * 1024 * 1024;
private int _iterations = 10;
private async Task CreateBufferFromJs()
{
for (int i = 0; i < _iterations; i++)
{
byte[] digits = await jsRuntime.InvokeAsync<byte[]>("CreateBuffer");
_bufferHolders.Add(new BufferHolder(digits));
}
_collectionCount = _bufferHolders.Count;
await jsRuntime.InvokeVoidAsync("alert", "Buffer created.");
}
private async Task CreateBuffer()
{
for (int i = 0; i < _iterations; i++)
{
byte[] digits = GetBytes();
_bufferHolders.Add(new BufferHolder(digits));
}
_collectionCount = _bufferHolders.Count;
await jsRuntime.InvokeVoidAsync("alert", "Buffer created.");
}
private byte[] GetBytes()
{
byte[] digits = new byte[_bufferLength];
for (int i = 0; i < _bufferLength; i++)
{
digits[i] = (byte)i;
}
return digits;
}
private async Task DestroyBuffer()
{
for (int i = 0; i < _bufferHolders.Count; i++)
{
_bufferHolders[i] = null;
}
_bufferHolders.Clear();
_collectionCount = _bufferHolders.Count;
await jsRuntime.InvokeVoidAsync("alert", "Buffer deleted.");
}
private record BufferHolder(byte[] Buffer);
}
//On Js side
function CreateBuffer()
{
var length = 5 * 1024 *1024 ;
var arr = new Uint8Array(length);
for (var i = 0; i < length; i++) {
arr[i] = i;
}
return arr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment