UnmanagedArray 2.1.3

dotnet add package UnmanagedArray --version 2.1.3                
NuGet\Install-Package UnmanagedArray -Version 2.1.3                
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="UnmanagedArray" Version="2.1.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add UnmanagedArray --version 2.1.3                
#r "nuget: UnmanagedArray, 2.1.3"                
#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 UnmanagedArray as a Cake Addin
#addin nuget:?package=UnmanagedArray&version=2.1.3

// Install UnmanagedArray as a Cake Tool
#tool nuget:?package=UnmanagedArray&version=2.1.3                

Unmanaged Array

GitHub license nuget

An Effective tool for unmanaged array in C#.

About

Array in C# is allocated in managed memory.

UnmanagedArray<T> in this library is allocated in unmanaged memory.

In other words, items in UnmanagedArray<T> is not collected by Garbage Collection.

Supported Types

The only type of item UnmanagedArray<T> supports is unmanaged type.

unmanaged type is int, float, recursive-unmanaged struct, and so on.

string, and other types which are class are NOT SUPPORTED.

(because reference types are allocated in managed memory on C#.)

Building from Source

$ git clone https://github.com/ikorin24/UnmanagedArray.git
$ cd UnmanagedArray
$ dotnet build src/UnmanagedArray/UnmanagedArray.csproj -c Release

Installation

Install from Nuget by package manager console (in Visual Studio).

https://www.nuget.org/packages/UnmanagedArray

PM> Install-Package UnmanagedArray

How to Use

The way of use is similar to normal array.

Unmanaged resources are release when an instance goes through the scope.

using UnmanageUtility;

// UnmanagedArray releases its memories when it goes through the scope.
using(var array = new UnmanagedArray<int>(10))
{
    for(int i = 0;i < array.Length;i++)
    {
        array[i] = i;
    }
}

If not use the using scope, you can release the memories by Dispose() method.

var array = new UnmanagedArray<int>(10);
array[3] = 100;
array.Dispose();       // The memories allocated in unmanaged is released here.

Of cource, LINQ is supported.

using(var array = Enumerable.Range(0, 10).ToUnmanagedArray())
using(var array2 = array.Where(x => x >= 5).ToUnmanagedArray()) {
    for(int i = 0; i < array2.Length; i++) {
        Console.WriteLine(array2[i]);       // 5, 6, 7, 8, 9
    }
}

NOTICE

UnmanagedArray<T> has Finalizer and releases its unmanaged resources automatically when you forget releasing that.

However, you have to release them explicitly ( by using scope or Dispose() ).

New Feature of ver 2.1.0

UnmanagedList<T> is available, which the way of use is similar to List<T>.

using(var list = new UnmanagedList<int>())
{
    list.Add(4);
    list.Add(9);
    foreach(var num in list)
    {
        Console.WriteLine(num);
    }
}

License and Credits

This is under MIT license.

This software includes the work that is distributed in the Apache License 2.0.

Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)

Author

github: ikorin24

Release Note

2020/01/11 v1.0.0

nuget

  • First release

2020/01/12 v1.0.1

nuget

  • Performance improvement of iteration by foreach, that is as faster as T[] (normal array).

2020/01/15 v1.0.2

nuget

  • Great performance improvement of accessing to the item by index. (array[i])

2020/04/30 v1.0.3

nuget

  • Performance improvement.
  • Add GC.AddMemoryPressure in constructor and GC.RemoveMemoryPressure in destructor.

2020/04/30 v2.0.0

nuget

  • Change namespace into UnmanageUtility.

2020/06/07 v2.0.1

nuget

2020/07/27 v2.1.0-rc

nuget

  • Add UnmanagedList<T>.

2020/10/05 v2.1.0

nuget

  • Performance improvement.
  • Add some methods.

2020/11/26 v2.1.1

nuget

  • Add UnmanagedArray<T>.Empty static property.
  • Add property setter of UnmanagedList<T>.Capacity.

2021/01/05 v2.1.2

nuget

  • Add UnmanagedArray<T>.AsSpan overload methods.
  • Package for multi target frameworks. (net48, netcoreapp3.1, net5.0, netstandard2.0, netstandard2.1)
  • Fix small bugs.

2021/02/10 v2.1.3

nuget

  • Add UnmanagedList<T>.Extend method.
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 is compatible.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos 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 UnmanagedArray:

Package Downloads
Akihabara

Mediapipe wrapper library.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.1.3 3,554 2/10/2021
2.1.2 372 1/5/2021
2.1.1 435 11/26/2020
2.1.0 537 10/5/2020
2.1.0-rc 334 7/27/2020
2.0.1 453 6/6/2020
2.0.0 471 4/30/2020
1.0.3 494 4/30/2020
1.0.2 556 1/15/2020
1.0.1 479 1/11/2020
1.0.0 522 1/11/2020