The static string argument you pass to CsvProvider is a template for it to infer the schema, but you can use a different value at runtime. So instead of this:
let sample = new CsvProvider<"Sample.csv">()
Do this:
let csv = CsvProvider<"Sample.csv">.Load("runtimeLocation.csv")
or this:
type CsvType = CsvProvider<"Sample.csv">
let csv = CsvType.Load("runtimeLocation.csv")
As for performance, the CsvProvider uses the same csv parser internally, so CsvFile should have similar performance characteristics, the difference is just on the strong typing