GC.GetTotalMemory retrieves the amount of memory thought to be allocated. It only knows about memory allocated by the managed components, unless you call GC.AddMemoryPressure to tell it about other memory allocated.
This property "PrivateMemorySize64" can be used to monitor memory usage on computers with 32-bit processors or 64-bit processors. The property value is equivalent to the Private Bytes performance counter for the process. Private Bytes refer to the amount of memory that the process executable has asked for, so it also includes the memory allocated by the native code.
Thus explains why PrivateMemorySize64 is bigger than GC.GetTotalMemory().
Please refer these articles: