"better" is a highly relative term. You seem to be concerned about speed, so you would probably be better off with the second method, because with the first one each call would lock the VI and prevent concurrent access, but that highly depends on specific circumstances.
The code you have here is actually the basis for two options - an action engine and an ad-hoc object-oriented system. In an OOP system, you would have the basic OOP infrastructure managing the instances and the locking and your code would manage the different functions (for example, you would have an "Open" function which would return a reference, a "Write" function and a read and write function for most properties). This creates a lot of overhead in the number of VIs that you will have and is usually slower, but it has it advantages the more complex your system gets. You can search for GOOP to learn about the different flavors of OOP in LabVIEW.
P.S. It's a minor point, but you can set the case structure to ignore the casing of strings.