The events are read once to construct the run summary and then one more time each time the run is selected as a neighbor to another run, so worst case for each other run / n^2 times.
This slows things down significantly (citation needed, but at least for LST dl3 I would be very surprised if this is not the main reason).