used spawned threads to put data so that profiled blocks aren't slowed. Also changed ServiceProfileData to use the with statement and a lock