Start with this:
Stopwatch Class (System.Diagnostics) | Microsoft Docs[
^] and use several instances to profile your code, which will enable you to discover exactly which part of that is slow: almost certainly it's going to be the call to FindOne but you need to be sure as you can;t optimise anything until you have bost a benchmark time to start with, and detailed info on the time taken by various parts - there is no point in trying to optimise code that only contributes 1% of the total time taken if a different part is taking 90% of it!
If it is the call, then you need to think about why you are doing it at all, and perhaps find a way to cache the info so you don't need to access a "real" directory structure at all.
Sorry, but we can't do any of that for you.