Andrew Harkins

Scanning and Cacheing PDM with API efficiency questions

Discussion created by Andrew Harkins on Dec 22, 2020
Latest reply on Jan 16, 2021 by Ulf Stockburger

Hello all,

I currently have a program using the API which runs in the background to get every file and cache them locally from the PDM. This program inserts every file record into a database so a different program can use that db to do our necessary work. This scanning program is just suppose to see when a new file is on the PDM and make sure they are cached locally so we can retrieve them as necessary. The program runs and it is currently taking 6 hours! Which is a ridiculously long amount of time. Does anyone know of a way to do this and make it much faster? The part of the program that takes 3/4ths of the time is the caching files from PDM. I have tried multiple different flags (EdmGetCmdFlags). This has seemed to be the best 1 that works and caches the files to the server.

Egcf_IncludeAutoCacheFiles 2048 = Selects the Check Out dialog box Get checkbox for the latest version if the referenced file is not in the local cache

Here is my caching file method

filePathsNcount = new Tuple<List<string>, int>(PDMfilePaths, PDMfileCount);

UpdateLocalCache(edmVault5, filePathsNcount);

private void UpdateLocalCache(EdmVault5 vault5, Tuple<List<string>, int> filePaths)




                if (filePaths != null)


                    IEdmBatchGet pdmBatchGetUtil;

                    pdmBatchGetUtil = (IEdmBatchGet)vault5.CreateUtility(EdmUtility.EdmUtil_BatchGet);


                    EdmSelItem[] pdmSelItems;

                    pdmSelItems = new EdmSelItem[filePaths.Item2];


                    for (int i = 0; i <= filePaths.Item2 - 2; i++)


                        string filePath = filePaths.Item1[i];

                        IEdmFile5 pdmFile;

                        IEdmFolder5 pdmFolder;

                        pdmFile = vault5.GetFileFromPath(filePath, out pdmFolder);


                        pdmSelItems[i].mlDocID = pdmFile.ID;

                        pdmSelItems[i].mlProjID = pdmFolder.ID;


                    pdmBatchGetUtil.AddSelection(vault5, ref pdmSelItems);

                    pdmBatchGetUtil.CreateTree(0, 2048);




            catch (Exception ex)