If functions are imported from an external DLL into a BDL script, does Silk Performer only load the external DLL once?
This depends on the value set for running multiple users per process. This can be checked under SETTINGS | SYSTEM | WORKBENCH | CONTROL | Virtual Users Per Process.
Assuming that this value is set to 1 then each time a VUser is created, Silk Performer launches a copy of PerfRun.exe.
PerfRun.exe then initializes all DLLs that are required for the running of that VUser. So if a VUser requires functions imported from an external DLL then PerfRun.exe will load that DLL when it starts. If you run a 100 user test the DLL will be loaded into memory 100 times, i.e. one copy for each VUser.
If the DLL is thread-safe then it is possible to set Virtual Users Per Process to a value greater than 1. If you use 5 users per process then each copy of PerfRun.exe will be shared by 5 Virtual Users. If you run a 100 user test the DLL will be loaded into memory 20 times, i.e. one copy for each 5 Virtual Users.