Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void CopyFeatures(string srcFile, string srcDir, string outFile, string outDir)
- {
- IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory();
- IWorkspace workspace = workspaceFactory.OpenFromFile(srcDir, 0);
- IFeatureClass featureClass = ((IFeatureWorkspace)workspace).OpenFeatureClass(srcFile);
- IFeatureCursor featureCursor = featureClass.Search(null, false);
- IFeature feature = featureCursor.NextFeature();
- IWorkspace outputWorkspace = workspaceFactory.OpenFromFile(outDir, 0);
- IFeatureClass outputFeatureClass = ((IFeatureWorkspace)outputWorkspace).CreateFeatureClass(outFile, featureClass.Fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
- IWorkspaceEdit workspaceEdit = ((IDataset)outputFeatureClass).Workspace as IWorkspaceEdit;
- if (!workspaceEdit.IsBeingEdited())
- {
- workspaceEdit.StartEditing(false);
- workspaceEdit.StartEditOperation();
- }
- IFeatureBuffer outputFeatureBuffer = outputFeatureClass.CreateFeatureBuffer();
- IFeatureCursor outputFeatureCursor = outputFeatureClass.Insert(true);
- while (feature != null)
- {
- for (int i = 0; i < outputFeatureBuffer.Fields.FieldCount; i++)
- {
- IField field = feature.Fields.Field[i];
- string myName = field.Name;
- if (field.Editable == true)
- outputFeatureBuffer.Value[outputFeatureBuffer.Fields.FindField(myName)] = feature.Value[feature.Fields.FindField(myName)];
- }
- outputFeatureCursor.InsertFeature(outputFeatureBuffer);
- ReleaseComReferences(feature);
- feature = featureCursor.NextFeature();
- }
- outputFeatureCursor.Flush();
- if (!ReferenceEquals(workspaceEdit, null))
- {
- workspaceEdit.StopEditOperation();
- workspaceEdit.StopEditing(true); // This line causing the increase in memory but the same memory doesn't get released.
- ReleaseComReferences(workspaceEdit);
- }
- ReleaseComReferences(featureCursor);
- ReleaseComReferences(workspace);
- ReleaseComReferences(featureClass);
- ReleaseComReferences(outputFeatureCursor);
- ReleaseComReferences(outputFeatureBuffer);
- ReleaseComReferences(outputWorkspace);
- ReleaseComReferences(outputFeatureClass);
- ReleaseComReferences(workspaceFactory);
- }
- public void ReleaseComReferences(object refernce)
- {
- if (refernce != null)
- {
- int refsLeft = 0;
- do
- {
- refsLeft = System.Runtime.InteropServices.Marshal.ReleaseComObject(refernce);
- }
- while (refsLeft > 0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement