An 800x600 image is just under half a million pixels. The magic wand takes about 5 seconds, which is not too bad. A 1024x1024 image is just over a million pixels. With double the pixels you might expect it to take about 10 seconds. It actually takes about 60 seconds. The 2048x2048 image is just over 4 million pixels, and I got bored waiting for it to finish.
The photo I found the problem was 20MP but not as bad for performance as the random noise. Selections with the magic wand were taking over a minute though, which is a right pain when you want to play with the tolerance to find a value that works.
I've just done a touch more investigation. It seems most of the time is spent in a polygon cliiper. Here's an example call stack grabbed with Process Explorer:
PaintDotNet.SystemLayer.Native.x64.dll!gpc_polygon_clip+0x16ab PaintDotNet.SystemLayer.Native.x64.dll!gpc_polygon_clip+0x1958 PaintDotNet.SystemLayer.Native.x64.dll!gpc_polygon_clip+0xe8 [Native Frame: IL Method without Metadata] [Managed to Unmanaged Transition] PaintDotNet.SystemLayer.dll!PaintDotNet.SystemLayer.FastMath.CombinePolyLists+0xa92 PaintDotNet.Core.dll!PaintDotNet.Rendering.GeometryList.Combine+0xd0 PaintDotNet.Core.dll!PaintDotNet.Rendering.GeometryList.FromNonOverlappingScans+0x178 PaintDotNet.Core.dll!PaintDotNet.Rendering.GeometryList.FromStencil+0x159 PaintDotNet.exe!PaintDotNet.Tools.MagicWand.MagicWandTool.CreateSelectionGeometry+0x449 PaintDotNet.exe!PaintDotNet.Tools.AsyncSelectionToolBase`2.<CreateSelectionOnBackgroundThread>b__9+0x5e PaintDotNet.Base.dll!PaintDotNet.Functional.Func.Eval+0x31 PaintDotNet.exe!PaintDotNet.Tools.AsyncSelectionToolBase`2.CreateSelectionOnBackgroundThread+0x15a PaintDotNet.Core.dll!PaintDotNet.Threading.ActionWorkItemQueue.OnExecuteNextWorkItem+0x52 PaintDotNet.Core.dll!PaintDotNet.Threading.MultithreadedWorkItemDispatcher.WorkThreadProc+0x345 mscorlib.dll!System.Threading.ExecutionContext.RunInternal+0x285 mscorlib.dll!System.Threading.ExecutionContext.Run+0x9 mscorlib.dll!System.Threading.ExecutionContext.Run+0x57 mscorlib.dll!System.Threading.ThreadHelper.ThreadStart+0x5d [unmanaged to Managed Transition] clr.dll!CoUninitializeEE+0x66b6b clr.dll!CoUninitializeEE+0x66be6 clr.dll!CoUninitializeEE+0x66c58 clr.dll!StrongNameSignatureVerification+0x12f5d clr.dll!CoUninitializeEE+0x712f4 clr.dll!CoUninitializeEE+0x71282 clr.dll!CoUninitializeEE+0x711f9 clr.dll!CoUninitializeEE+0x71357 clr.dll!StrongNameSignatureVerification+0x12e41 clr.dll!GetMetaDataInternalInterface+0x1def2 KERNEL32.dll!BaseThreadInitThunk+0xd ntdll.dll!RtlUserThreadStart+0x21
If the "GeometryList.FromStencil()" function is doing what I think it is, I suspect it would be easy to optimize - something like http://en.wikipedia.org/wiki/Marching_squares springs to mind.