/// <summary> /// Try to appropreate /// </summary> public MemoryComparator() { IsDisposed = false; #if NET_SIMD if (Avx2.IsSupported) { _compareMemory = CompareMemoryAvx2; } else if (Sse2.IsSupported) { _compareMemory = CompareMemorySse2; } #else var mh = CreateAppropreateCompareMemoryMethodHandle(); if (mh != null) { _compareMemoryMethodHandle = mh; _compareMemory = mh.Method; } #endif // NET_SIMD else if (Environment.Is64BitProcess) { _compareMemory = CompareMemoryNaiveX64; } else { _compareMemory = CompareMemoryNaiveX86; } }
/// <summary> /// Release resources. /// </summary> /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; /// <c>false</c> to release only unmanaged resources.</param> protected virtual void Dispose(bool disposing) { if (IsDisposed) { return; } if (disposing) { _compareMemory = null; #if !NET_SIMD if (_compareMemoryMethodHandle != null) { _compareMemoryMethodHandle.Dispose(); _compareMemoryMethodHandle = null; } #endif // !NET_SIMD } IsDisposed = true; }