I assume this is on a real-time target because of where the question was asked. User events are supported on real-time targets, but I don't use them that often because of the other options of queues and FIFOs.
So you want to have a deterministic loop doing PID, but you want also be able to send commands to it (like setpoint) I assume. I haven't used execution trace to look at it, but using an event structure is going to make it jittery (don't know by how much). Personally I have used RT FIFO of type U8 array with the array size fixed to the largest datatype. The Create RT FIFO has an input where you set the array size. This will decrease any chance of buffer allocations. Also I would use the Timed sequence structure. It puts the loop in a priority thread, but has less overhead than the timed while loop (10% < CPU).