By recreating the DataLoader in each iteration you are resetting the workers and would need to load the new batch(es) from the beginning. I would assume you should see the same time using the main process to load the data (num_workers=0), as the overhead of the DataLoader creation should be small.
However, depending on the size of your dataset the creation of the WeightedRandomSampler might add some overhead, so you could profile it for your use case.