For the application slowness, one thing I know can be an issue, especially if you have 50 users pounding on a VFP app. Is the application being run from the SERVER... I mean, does every user have their shortcut pointing to something like
S:\SomeShare\YourVFPApp.exe
If that is the case, then that can SIGNIFICANTLY kill performance. It is pulling the application down over the network for every user sucking up traffic. What I have done with clients is the following. Pick a spot on the local C: drive of the machine... ex: C:\NetworkApps and copy the YourVFPApp.exe into this C:\NetworkApps folder.
Next, create a new shortcut pointing to the C:\NetworkApps\YourVFPApp.exe and save it.
Next, modify the shortcut but this time, change the "Start In" folder to the original location such as "S:\SomeShare\". Save changes and run THIS version of the shortcut.
What this is basically doing is running the app LOCALLY, but by starting in the same final location that is being shared (especially if hard-code paths were implemented and horrendous to deal with). What this does is prevents the need of all users getting the applications over the network and just dealing with the actual tables and data traffic.
Yes, this can be a bit of a pain when there are application updates, but for that, I've written another VFP simple app that looks to the local drive, compares the exe to that of the "latest version" as on the network share. If the server version is newer, copy that locally, THEN launch it starting in the expected "S:\SomeShare\" folder.
As for locking, if you are doing TABLE locking vs RECORD locking, you'll obviously see more delay issues of waiting for lock messages, but clearing possible network bottle necks on the application end might help alleviate it for you.