FastGenericNew.SourceGenerator
3.0.0-preview2
See the version list below for details.
dotnet add package FastGenericNew.SourceGenerator --version 3.0.0-preview2
NuGet\Install-Package FastGenericNew.SourceGenerator -Version 3.0.0-preview2
<PackageReference Include="FastGenericNew.SourceGenerator" Version="3.0.0-preview2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add FastGenericNew.SourceGenerator --version 3.0.0-preview2
#r "nuget: FastGenericNew.SourceGenerator, 3.0.0-preview2"
// Install FastGenericNew.SourceGenerator as a Cake Addin #addin nuget:?package=FastGenericNew.SourceGenerator&version=3.0.0-preview2&prerelease // Install FastGenericNew.SourceGenerator as a Cake Tool #tool nuget:?package=FastGenericNew.SourceGenerator&version=3.0.0-preview2&prerelease
FastGenericNew
The ultimate fast alternative to Activator.CreateInstance<T>
/ new T()
Features
A way better CreateInstance
- Up to 50x faster than
Activator.CreateInstance<T>
- Generic Parameters Support
- Non-Public Constructor Support
- Zero boxing/unboxing
- No Generic Constraints
- TryGetValue-like TryFastNew API
- Link Mode PublishTrimmed Support
- Up to 50x faster than
Modern Compiler Integration
- Source Generator v2 (Incremental Generator)
- Highly Configurable (Props)
- Multi-threaded Generation
Lastest C# Features Support
- C# 8 Nullable Support
- C# 10 Parameterless struct constructors Support (Both invokes or not)
Installation
You can only use one of them
Pre-Compiled Version
dotnet add package FastGenericNew --version 3.0.0-preview2
<ItemGroup>
<PackageReference Include="FastGenericNew" Version="3.0.0-preview2" />
</ItemGroup>
SourceGenerator Version
dotnet add package FastGenericNew.SourceGenerator --version 3.0.0-preview2
<ItemGroup>
<PackageReference Include="FastGenericNew.SourceGenerator" Version="3.0.0-preview2" />
</ItemGroup>
.NET Standard 2.0 & C# 8.0 or above is required for SourceGenerator version
Examples
using FastGenericNew;
var obj = FastNew.CreateInstance<T>();
// With parameter(s)
var obj2 = FastNew.CreateInstance<T, string>("text");
var obj3 = FastNew.CreateInstance<T, string, int>("text", 0);
// Try
if (FastNew.TryCreateInstance<T, string>("arg0", out T result));
{
// ...
}
Notes
With .NET Framework,
Activator.CreateInstance<T>()
invokes the parameterless constructor of ValueType if
the constraint iswhere T : new()
but appears to ignore the parameterless constructor if the constraint iswhere T : struct
.
ButFastNew.CreateInstance<T>()
will always invoke the parameterless constructor if it's available.If you don't want to invoke the parameterless constructor of ValueType.
Consider to useFastNew.NewOrDefault<T>()
which will never invoke the parameterless constructor ofValueType
Benchmark
Environment
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000
AMD Ryzen 9 3900X, 1 CPU, 24 logical and 12 physical cores
.NET SDK=6.0.200-preview.22055.15
[Host] : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
.NET 5.0 : .NET 5.0.14 (5.0.1422.5710), X64 RyuJIT
.NET 6.0 : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
.NET Framework 4.8 : .NET Framework 4.8 (4.8.4470.0), X64 RyuJIT
Reference Types
Value Types
License
FastGenericNew is licensed under the MIT license.
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
3.3.1 | 553 | 8/15/2024 |
3.3.0 | 155 | 8/15/2024 |
3.1.0-preview1 | 1,883 | 3/18/2022 |
3.0.0-preview2.1 | 130 | 3/12/2022 |
3.0.0-preview2 | 167 | 3/6/2022 |
3.0.0-preview1 | 161 | 3/5/2022 |