Second, when the last reference to the workspace is released, the workspace is automatically deleted from the disk.
public void Construct(IPropertySet props) //this is the function in SOE main file that reads properties { configProps = props; //load properties //.... //Create Scratch Workspace Type factoryType = Type.GetTypeFromProgID( "esriDataSourcesGDB.FileGDBScratchWorkspaceFactory"); IScratchWorkspaceFactory2 scratchWorkspaceFactory = (IScratchWorkspaceFactory2) Activator.CreateInstance(factoryType); //Get default workspace. IWorkspace scratchWorkspace = scratchWorkspaceFactory.DefaultScratchWorkspace; if (scratchWorkspace == null) //create a new one { scratchWorkspace = scratchWorkspaceFactory.CreateNewScratchWorkspace(); } }
/// <summary> /// create a memory workspace /// </summary> /// <returns>memory workspace</returns> public static IWorkspace CreateInMemoryWorkspace() { // Create an in-memory workspace factory. Type factoryType = Type.GetTypeFromProgID( "esriDataSourcesGDB.InMemoryWorkspaceFactory"); IWorkspaceFactory workspaceFactory = (IWorkspaceFactory) Activator.CreateInstance(factoryType); // Create an in-memory workspace. IWorkspaceName workspaceName = workspaceFactory.Create(string.Empty, "memoryWorkspace", null, 0); // Cast for IName and open a reference to the in-memory workspace through the name object. Guid.NewGuid().ToString() IName name = (IName)workspaceName; IWorkspace workspace = (IWorkspace)name.Open(); return workspace; }
I haven't tried your method (perahps you have some reference) but if you want try an alternative method. With InMemory I haven't had problem /// <summary> /// create a memory workspace /// </summary> /// <returns>memory workspace</returns> public static IWorkspace CreateInMemoryWorkspace() { // Create an in-memory workspace factory. Type factoryType = Type.GetTypeFromProgID( "esriDataSourcesGDB.InMemoryWorkspaceFactory"); IWorkspaceFactory workspaceFactory = (IWorkspaceFactory) Activator.CreateInstance(factoryType); // Create an in-memory workspace. IWorkspaceName workspaceName = workspaceFactory.Create(string.Empty, "memoryWorkspace", null, 0); // Cast for IName and open a reference to the in-memory workspace through the name object. Guid.NewGuid().ToString() IName name = (IName)workspaceName; IWorkspace workspace = (IWorkspace)name.Open(); return workspace; }
yes I know InMemory is suitable for little dataset but my suggest is for see if you had lock. I normally create file geodatabase with name _ags_{guid} in output so the are deleted from arcgis server.
IMapServerInit mapServerInit = this.mapServer as IMapServerInit; string pathOutputAGS = (new System.IO.DirectoryInfo(mapServerInit.PhysicalOutputDirectory)).Parent.FullName; string fileName = System.IO.Path.ChangeExtension(string.Format("_ags_{0}", Guid.NewGuid().ToString()), "gdb"); Type factoryType = Type.GetTypeFromProgID( "esriDataSourcesGDB.FileGDBWorkspaceFactory"); IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance (factoryType); IWorkspaceName workspaceName = workspaceFactory.Create(pathOutputAGS, fileName, null, 0); IName name = (IName)workspaceName; IWorkspace workspace = (IWorkspace)name.Open();
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.