UnmanagedArray 2.1.3
dotnet add package UnmanagedArray --version 2.1.3
NuGet\Install-Package UnmanagedArray -Version 2.1.3
<PackageReference Include="UnmanagedArray" Version="2.1.3" />
paket add UnmanagedArray --version 2.1.3
#r "nuget: UnmanagedArray, 2.1.3"
// 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
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
Release Note
2020/01/11 v1.0.0
- First release
2020/01/12 v1.0.1
- Performance improvement of iteration by
foreach
, that is as faster as T[] (normal array).
2020/01/15 v1.0.2
- Great performance improvement of accessing to the item by index. (
array[i]
)
2020/04/30 v1.0.3
- Performance improvement.
- Add
GC.AddMemoryPressure
in constructor andGC.RemoveMemoryPressure
in destructor.
2020/04/30 v2.0.0
- Change namespace into
UnmanageUtility
.
2020/06/07 v2.0.1
2020/07/27 v2.1.0-rc
- Add
UnmanagedList<T>
.
2020/10/05 v2.1.0
- Performance improvement.
- Add some methods.
2020/11/26 v2.1.1
- Add
UnmanagedArray<T>.Empty
static property. - Add property setter of
UnmanagedList<T>.Capacity
.
2021/01/05 v2.1.2
- 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
- Add
UnmanagedList<T>.Extend
method.
Product | Versions 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. |
-
.NETCoreApp 3.1
- No dependencies.
-
.NETFramework 4.8
- System.Memory (>= 4.5.3)
-
.NETStandard 2.0
- System.Memory (>= 4.5.3)
-
.NETStandard 2.1
- System.Memory (>= 4.5.3)
-
net5.0
- No dependencies.
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.