This release brings some tuning of Hangfire.Core internals to allocate less where possible, and contains fixes for Hangfire.SqlServer to have less polling queries and avoid silently truncating queue names.

Please note that version 1.8.13 has been unlisted from NuGet due to problematic changes that were rolled back in 1.8.14.


  • Changed – Partial cache for serialization and deserialization in InvocationData to produce less strings.
  • Changed – Add caching for default type serializer and resolver.
  • Changed – Don’t let JobFilter-related logic to show up in profilers.
  • Changed – Modify IProfiler to be less allocatey for diagnostic purposes that almost never run.
  • Changed – Prefer using CancellationToken.WaitHandle again, since early .NET Core days are gone.
  • Changed – Fewer allocations when working with IStateHandler collections in a state machine.
  • Fixed – Redirect the “System.Private.Xml.Linq” assembly to the “System.Xml.Linq” one for better interoperability.
  • Fixed – Don’t throw KeyNotFoundException when recurring job is malformed.
  • Fixed – Proper relative path calculation in UrlHelper.To for OWIN-based Dashboard UI (by @LordJZ).
  • Fixed – Typo in the Turkish localization file (by @ismkdc).
  • Project – Switch to a modern PowerShell 7+ to speed up SignPath installation on AppVeyor.


  • Changed – Limit polling queries when queues are empty with a semaphore for all configurations.
  • Changed – Use per-queue signaling for same-process workers, instead of having a global signal.
  • Fixed – Don’t silently truncate queue names, throw an exception instead.
  • Project – Decrease delays in SQL Server-related tests to complete them faster.

Subscribe to monthly updates

Subscribe to receive monthly blog updates. Very low traffic, you are able to unsubscribe at any time.