We've faced such a problem after migrating from SQL Server 2008 to SQL Server 2016: there's a merge replication implemented and it takes up to 2 hours (!) to generate a snapshot, instead of 5 minutes like it was before the upgrade.
We've tried to increase
MaxBcpThreads, have changed the agents' parameters- but nothing from that seems to help. Would be glad to hear any kinds of solutions.