Commit Graph

129 Commits

Author SHA1 Message Date
fb31fd8ca8 Reserve index 0 in SlotMap, improve unsafe collections
- Reserve index 0 as always invalid in SlotMap, ConcurrentSlotMap, UnsafeSlotMap, and UnsafeSparseSet; update all index checks and slot operations accordingly
- Refactor SlotMap to use parallel arrays and BitArray for occupancy
- Double capacity on resize for all major unsafe collections
- Add debugger display support for unsafe collections
- Improve NuGet publishing workflow to skip existing versions
- Increment package versions (LowLevel: 1.3.1, main: 1.0.2)
- Add comprehensive unit tests for SlotMap and ConcurrentSlotMap
- Update main program and documentation for new slot map behavior
2025-12-12 16:10:49 +09:00
a0a4b347dd Added ReleaseTempAllocator to JobScheduler 2025-12-09 12:31:51 +09:00
0438fce10e Fixed the bug that MemCpy does not work as expected 2025-12-07 00:04:37 +09:00
f3b0f295a8 Added new TempJobAllocator
Added new AllocationHandle property in Stack.Scope.

Changed the ref AllocationHandle constructor parameter to AllocationHandle on of all UnsafeCollection types
Removed Allocator.Stack. Use Stack.Scope.AllocationHandle to allocate on stack instead.
2025-12-06 22:16:39 +09:00
d6c472753d Added Equals to UnsafeBitSet and SpanBitSet 2025-12-05 21:28:59 +09:00
4dd5d6f1c6 Add iterators to UnsafeBitSet and SpanBitSet
Introduced `Iterator` structs in `UnsafeBitSet` and `SpanBitSet`
to enable efficient traversal of set bits. Added `GetIterator`
methods to both structs to return iterator instances. Implemented
`NextSetBit` in `SpanBitSet` to support iterator functionality.

Changed constants in `UnsafeBitSet` from `private` to `internal`
for broader assembly access. Removed redundant methods from
`SpanBitSet` to streamline the API in favor of iterator-based
operations.

Updated constructors in `UnsafeSlotMap` and `UnsafeSparseSet` to
conditionally clear arrays based on `AllocationOption.Clear`.

Incremented assembly version to 1.2.7 to reflect these updates.
2025-12-05 16:36:02 +09:00
c152e4383d Added GetHashCode to UnsafeBitSet 2025-12-03 20:03:42 +09:00
0ad4322058 Fixed memory lack bug caused by UnsafeSlotMap 2025-11-27 16:18:17 +09:00
20320c52a1 Fixed memory lack bug caused by UnsafeSlotMap 2025-11-27 16:17:24 +09:00
2431c3d602 Updated package version 2025-11-27 15:18:39 +09:00
a26a91769f Added DebugSymbol package 2025-11-27 15:18:14 +09:00
48f50e79fd Merge branch 'main' of https://git.personalnas.com/Misaki/Misaki.HighPerformance 2025-11-27 15:03:15 +09:00
8f4a2aa5d6 Update DebugSymbols 2025-11-27 15:03:05 +09:00
b71ab18050 Update DebugSymbols 2025-11-27 15:02:33 +09:00
b67569aa14 Improve AsSpan, CopyTo, and CopyFrom for IUnsafeCollection 2025-11-27 14:04:46 +09:00
f4e803e5a4 Updated package version 2025-11-25 14:25:48 +09:00
4bcd300a1c Merge pull request 'develop' (#5) from develop into main
Reviewed-on: #5
2025-11-25 03:32:41 +00:00
459f4ba9ee Merge branch 'develop' of https://git.personalnas.com/Misaki/Misaki.HighPerformance into develop
Some checks failed
Publish NuGet Packages / publish (pull_request) Failing after 2m14s
# Conflicts:
#	Misaki.HighPerformance.LowLevel/Collections/UnsafeBitSet.cs
#	Misaki.HighPerformance.Test/UnitTest/Collections/TestUnsafeBitSet.cs
2025-11-25 12:31:16 +09:00
3269244ab1 Refactor memory management with MemoryHandle
Replaced `SafeHandle` with a new `MemoryHandle` system for improved memory tracking, safety, and leak detection. Updated allocators (`ArenaAllocator`, `HeapAllocator`, `StackAllocator`) and collections (`UnTypedArray`, `UnsafeArray<T>`, `UnsafeBitSet`) to use `MemoryHandle`.

Refactored `AllocationManager` to use `ConcurrentSlotMap` for live allocation tracking and added methods for managing `MemoryHandle` instances. Simplified alignment and padding logic across allocators and collections.

Enhanced performance with optimized memory operations (`MemClear`, `MemSet`, `MemCpy`) and vectorized operations in `MemoryUtility` and `UnsafeBitSet`. Fixed alignment issues in vectorized memory operations.

Updated tests to reflect the new memory management system and added new tests for `UnsafeBitSet` bitwise operations. Enabled `ENABLE_COLLECTION_CHECKS` for debug builds and improved error messages and documentation.

Removed unused `SafeHandle` code and adjusted project configuration to include necessary references.
2025-11-25 12:27:10 +09:00
8418d3df7b Refactor memory management with MemoryHandle
Replaced `SafeHandle` with a new `MemoryHandle` system for improved memory tracking, safety, and leak detection. Updated allocators (`ArenaAllocator`, `HeapAllocator`, `StackAllocator`) and collections (`UnTypedArray`, `UnsafeArray<T>`, `UnsafeBitSet`) to use `MemoryHandle`.

Refactored `AllocationManager` to use `ConcurrentSlotMap` for live allocation tracking and added methods for managing `MemoryHandle` instances. Simplified alignment and padding logic across allocators and collections.

Enhanced performance with optimized memory operations (`MemClear`, `MemSet`, `MemCpy`) and vectorized operations in `MemoryUtility` and `UnsafeBitSet`. Fixed alignment issues in vectorized memory operations.

Updated tests to reflect the new memory management system and added new tests for `UnsafeBitSet` bitwise operations. Enabled `ENABLE_COLLECTION_CHECKS` for debug builds and improved error messages and documentation.

Removed unused `SafeHandle` code and adjusted project configuration to include necessary references.
2025-11-25 00:56:21 +09:00
cced0393d6 Merge branch 'main' of https://git.personalnas.com/Misaki/Misaki.HighPerformance 2025-11-23 13:56:50 +09:00
fe91488319 Update .gitea/workflows/publish-nuget.yaml
Updated workflow
2025-11-23 04:52:25 +00:00
517abd64d6 Updated package version 2025-11-23 13:50:29 +09:00
396f89d33c Update .gitea/workflows/publish-nuget.yaml
Update gitea workflow
2025-11-23 04:38:16 +00:00
e28835caa0 Merge pull request 'Add Roslyn analyzer and code fix for unique ownership' (#4) from develop into main
Reviewed-on: #4
2025-11-23 04:25:37 +00:00
e8b744b7f7 Merge branch 'main' into develop
All checks were successful
Publish NuGet Packages / publish (pull_request) Successful in 2m4s
2025-11-23 04:25:29 +00:00
27dfa67784 Add Roslyn analyzer and code fix for unique ownership
Some checks failed
Publish NuGet Packages / publish (pull_request) Has been cancelled
Introduce a Roslyn analyzer to enforce unique ownership semantics for structs marked with the `[NonCopyable]` attribute. Added a corresponding code fix to resolve violations by suggesting the use of `Share()` or other ownership transfer methods.

Key changes:
- Added `StructCopyCodeAnalyzer` to detect invalid struct copies.
- Implemented `StructCopyCodeFixProvider` to provide code fixes.
- Created `Misaki.HighPerformance.Analyzer` and `CodeFixes` projects.
- Added unit tests for the analyzer and code fixes.
- Introduced `UniquePtr<T>` and `SharedPtr<T>` for pointer ownership.
- Added a Visual Studio extension project and packaging support.
- Updated `UnsafeUtility` to use `nint`/`nuint` for indices.
2025-11-22 18:20:03 +09:00
32ff948268 Update .gitea/workflows/publish-nuget.yaml
Updated gitea workflow to use .net 10
2025-11-18 14:26:48 +00:00
b9ae8ee15e Merge pull request 'develop' (#3) from develop into main
Reviewed-on: #3
2025-11-18 14:25:25 +00:00
c0a0861897 Improve memory safety and alignment handling
Some checks failed
Publish NuGet Packages / publish (pull_request) Failing after 1m5s
- Updated `.gitignore` to include `.vscode/` and clarified comments.
- Introduced `SafeHandle` for managing memory alignment and safe access.
- Refactored `UnsafeArray<T>` to add bounds checking and alignment logic.
- Added `IUnsafeHashCollection<T>` for specialized hash-based collections.
- Refactored `UnsafeHashMap<TKey, TValue>` and `UnsafeHashSet<T>` to use `HashMapHelper<TKey>` with alignment support.
- Made `UnsafeSlotMap<T>` methods `readonly` for immutability.
- Enhanced `HashMapHelper<TKey>` with alignment-aware buffer management and validation.
- Updated benchmarks to use `UnsafeArray<Vector256<int>>` and added capacity checks.
- Incremented assembly version to `1.1.3` in `Misaki.HighPerformance.LowLevel.csproj`.
- Updated `Program.cs` to run `CollectionBenchmark` and demonstrate safe disposal handling.
2025-11-18 01:25:40 +09:00
57725369f9 Merge branch 'develop' of https://git.personalnas.com/Misaki/Misaki.HighPerformance into develop 2025-11-14 11:14:43 +09:00
24a7d49ae2 Upgrade to .NET 10 and refactor core components
Upgraded target framework to .NET 10 across all projects to leverage new features and improve performance.

Refactored `JobScheduler` to fix method naming inconsistencies and ensure proper resource disposal. Enhanced `AllocationManager` with safer memory operations and better performance handling. Simplified `ReadOnlyUnsafeCollection` enumerator logic for efficiency.

Overhauled `UnsafeBitSet` with new properties, improved bitwise operations, and optimized memory management. Updated `UnsafeSlotMap` and `ConcurrentSlotMap` for better validation and naming consistency.

Revised `MemoryLeakException` to use `ReadOnlySpan` for improved performance. Simplified `MathematicsBenchmark` logic and integrated `BenchmarkDotNet` for testing.

Added AOT compatibility settings for `Debug` and `Release` configurations. Introduced unit tests for `UnsafeBitSet` to validate functionality. Cleaned up unused code, improved readability, and ensured consistent naming conventions.

Updated project references and metadata for consistency. Enabled inline methods for `NET10_0_OR_GREATER` in `VectorGenerator`.
2025-11-14 11:14:09 +09:00
4363081142 Merge pull request 'Refactor unsafe collections and improve memory handling' (#2) from develop into main
Reviewed-on: #2
2025-11-11 12:21:39 +00:00
c363296727 Merge branch 'main' into develop
All checks were successful
Publish NuGet Packages / publish (pull_request) Successful in 1m45s
2025-11-11 12:21:32 +00:00
bf4dd5670e Refactor unsafe collections and improve memory handling
Some checks failed
Publish NuGet Packages / publish (pull_request) Has been cancelled
Refactored enumerators across multiple unsafe collections to use
`ref` returns for `Current`, improving performance and reducing
memory usage. Enhanced memory management with `AllocationOption`
support and optimized resizing logic for collections like
`UnsafeBitSet`, `UnsafeSlotMap`, and `UnsafeSparseSet`.

Updated `publish-nuget.yaml` to support manual workflow dispatch
and trigger on `push`/`pull_request` events. Incremented project
version to `1.1.2` and ensured NuGet package generation on build.
2025-11-11 21:20:33 +09:00
f2e2051378 Merge pull request 'Fixed bug that SlotMap.Contains does not return a correct value.' (#1) from develop into main
All checks were successful
Publish NuGet Packages / publish (push) Successful in 1m57s
Reviewed-on: #1
2025-11-11 08:39:11 +00:00
bc8b2c0aaa Fixed bug that SlotMap.Contains does not return a correct value.
Some checks failed
Publish NuGet Packages / publish (pull_request) Failing after 6s
2025-11-11 17:38:30 +09:00
e97b295b05 Update package version.
All checks were successful
Publish NuGet Packages / publish (push) Successful in 1m46s
2025-11-06 15:02:44 +09:00
fbe72e33f7 Refactor AllocationManager and enhance debug tracking
Refactored `AllocationManager` to introduce intrusive allocation tracking with `AllocationHeader` structs for debug mode. Added lightweight allocation counters for non-debug mode. Enhanced memory leak detection with detailed stack traces and `MemoryLeakException`.

Simplified `AllocationInfo` by removing the `Allocator` property. Updated `AllocationOption` enum to remove `UnTracked` and clarified documentation.

Improved unsafe collections (`UnsafeArray`, `UnsafeStack`, etc.) with strongly-typed enumerators and better compatibility with `IEnumerable<T>`. Enhanced `UnsafeStack` with a dedicated `Enumerator` struct and consistent constructor parameters.

Refactored `MemoryLeakException` to support detailed allocation info and improved stack trace formatting. Simplified `MemoryUtility` by removing redundant null checks.

Added unit tests for `AllocationManager`, `UnsafeArray`, and `UnsafeStack` to validate memory management and functionality. Updated `Program.cs` with new examples.

Cleaned up namespaces, removed redundant `using` directives, and improved XML documentation. Applied `MethodImplOptions.AggressiveInlining` to performance-critical methods.
2025-11-06 01:28:43 +09:00
b914716225 Fix package dependency problem
All checks were successful
Publish NuGet Packages / publish (push) Successful in 1m47s
2025-11-04 20:48:25 +09:00
308c70d0e1 Fix nuget push command
All checks were successful
Publish NuGet Packages / publish (push) Successful in 1m46s
2025-11-04 20:23:24 +09:00
f708116eea Fix package name searching
Some checks failed
Publish NuGet Packages / publish (push) Failing after 1m51s
2025-11-04 20:16:51 +09:00
36b8bd06d5 Update workflow;
Some checks failed
Publish NuGet Packages / publish (push) Failing after 1m41s
2025-11-04 18:32:44 +09:00
b32d4ca1b7 Merge branch 'main' of https://git.personalnas.com/Misaki/Misaki.HighPerformance 2025-11-04 18:20:02 +09:00
f14f3b07cd Update package info
All checks were successful
Publish NuGet Packages / publish (push) Successful in 1m39s
2025-11-04 18:19:05 +09:00
5867895e95 Update .gitea/workflows/publish-nuget.yaml
Fix the searching path
2025-11-04 09:16:10 +00:00
8395914cef Fix workflow
Some checks failed
Publish NuGet Packages / publish (push) Failing after 1m36s
2025-11-04 18:08:04 +09:00
fa7f270430 Fixe msbuild issue in workflow
All checks were successful
Publish NuGet Packages / publish (push) Successful in 1m24s
2025-11-04 18:02:39 +09:00
30e9809a9f Merge branch 'main' of https://git.personalnas.com/Misaki/Misaki.HighPerformance
Some checks failed
Publish NuGet Packages / publish (push) Failing after 1m25s
# Conflicts:
#	.gitea/workflows/publish-nuget.yaml
2025-11-04 17:57:50 +09:00
f20734ee76 Fix indentation 2025-11-04 17:57:36 +09:00