diff --git a/ARMeilleure/Common/EntryTable.cs b/ARMeilleure/Common/EntryTable.cs index bb171dc67..5f5a0e847 100644 --- a/ARMeilleure/Common/EntryTable.cs +++ b/ARMeilleure/Common/EntryTable.cs @@ -10,13 +10,13 @@ namespace ARMeilleure.Common /// address through out the table's lifetime. /// /// Type of the entry in the table - class EntryTable : IDisposable where TEntry : unmanaged + class EntryTable where TEntry : unmanaged { private bool _disposed; private int _freeHint; private readonly int _pageCapacity; // Number of entries per page. private readonly int _pageLogCapacity; - private readonly Dictionary _pages; + private readonly Dictionary _pages; private readonly BitMap _allocated; /// @@ -41,7 +41,7 @@ namespace ARMeilleure.Common } _allocated = new BitMap(); - _pages = new Dictionary(); + _pages = new Dictionary(); _pageLogCapacity = BitOperations.Log2((uint)(pageSize / sizeof(TEntry))); _pageCapacity = 1 << _pageLogCapacity; } @@ -149,49 +149,14 @@ namespace ARMeilleure.Common { var pageIndex = (int)((uint)(index & ~(_pageCapacity - 1)) >> _pageLogCapacity); - if (!_pages.TryGetValue(pageIndex, out IntPtr page)) + if (!_pages.TryGetValue(pageIndex, out TEntry[] page)) { - page = Marshal.AllocHGlobal(sizeof(TEntry) * _pageCapacity); + page = GC.AllocateUninitializedArray(_pageCapacity, pinned: true); _pages.Add(pageIndex, page); } - return new Span((void*)page, _pageCapacity); - } - - /// - /// Releases all resources used by the instance. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Releases all unmanaged and optionally managed resources used by the - /// instance. - /// - /// to dispose managed resources also; otherwise just unmanaged resouces - protected virtual void Dispose(bool disposing) - { - if (!_disposed) - { - foreach (var page in _pages.Values) - { - Marshal.FreeHGlobal(page); - } - - _disposed = true; - } - } - - /// - /// Frees resources used by the instance. - /// - ~EntryTable() - { - Dispose(false); + return page; } } } diff --git a/ARMeilleure/Translation/Translator.cs b/ARMeilleure/Translation/Translator.cs index 9f88f17a9..db800918d 100644 --- a/ARMeilleure/Translation/Translator.cs +++ b/ARMeilleure/Translation/Translator.cs @@ -174,8 +174,6 @@ namespace ARMeilleure.Translation _jumpTable.Dispose(); _jumpTable = null; - CountTable.Dispose(); - GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; } }