If you stop the Matcher/Dispatcher and delete the database file, all user records are permanently lost. IDKit client doesn't cache anything.

So I guess you are just accidentally using some other database. To check this, please watch the database file as you are adding new users. If you are storing images (storage of images is enabled in global configuration parameter CFG_STORE_IMAGES), the file should grow by some 50KB for every fingerprint added. If it doesn't grow, you are definitely storing fingerprints in some other database. Matcher/Dispatcher performs database commit after every user is added/updated/removed, so the file should be growing immediately after registering new user.   

If this theory is correct, then the question is which database file you are using. In order to find out, I would need to know the connection string you are passing to IDKit.Connect(). If it is something like "type=service; server=localhost", then you are using local Matcher. Similarly, if it's "type=service; server=someothermachine", you are using remote Matcher. If it's "somefile.db", you are using database file in the current folder (where application is running). You might be also using IDKit.GetInstance(). In this case only connection string used in first call to IDKit.GetInstance() is considered. Further calls to IDKit.GetInstance() don't change connection parameters.   

You can also start the Matcher from console with parameter "-d 2" to enable logging (into console window) of requests received from clients. Check that Matcher log corresponds to the calls you make from your application. If you are using Windows Vista, running Matcher from console will also prevent file system virtualization from invisibly corrupting configuration or database files.