Advertisement
Guest User

Untitled

a guest
Sep 30th, 2014
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. public void CopyFeatures(string srcFile, string srcDir, string outFile, string outDir)
  2. {
  3. IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory();
  4. IWorkspace workspace = workspaceFactory.OpenFromFile(srcDir, 0);
  5. IFeatureClass featureClass = ((IFeatureWorkspace)workspace).OpenFeatureClass(srcFile);
  6. IFeatureCursor featureCursor = featureClass.Search(null, false);
  7. IFeature feature = featureCursor.NextFeature();
  8.  
  9. IWorkspace outputWorkspace = workspaceFactory.OpenFromFile(outDir, 0);
  10. IFeatureClass outputFeatureClass = ((IFeatureWorkspace)outputWorkspace).CreateFeatureClass(outFile, featureClass.Fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
  11.  
  12. IWorkspaceEdit workspaceEdit = ((IDataset)outputFeatureClass).Workspace as IWorkspaceEdit;
  13. if (!workspaceEdit.IsBeingEdited())
  14. {
  15. workspaceEdit.StartEditing(false);
  16. workspaceEdit.StartEditOperation();
  17. }
  18.  
  19. IFeatureBuffer outputFeatureBuffer = outputFeatureClass.CreateFeatureBuffer();
  20. IFeatureCursor outputFeatureCursor = outputFeatureClass.Insert(true);
  21.  
  22. while (feature != null)
  23. {
  24. for (int i = 0; i < outputFeatureBuffer.Fields.FieldCount; i++)
  25. {
  26. IField field = feature.Fields.Field[i];
  27. string myName = field.Name;
  28. if (field.Editable == true)
  29. outputFeatureBuffer.Value[outputFeatureBuffer.Fields.FindField(myName)] = feature.Value[feature.Fields.FindField(myName)];
  30. }
  31.  
  32. outputFeatureCursor.InsertFeature(outputFeatureBuffer);
  33. ReleaseComReferences(feature);
  34. feature = featureCursor.NextFeature();
  35. }
  36. outputFeatureCursor.Flush();
  37. if (!ReferenceEquals(workspaceEdit, null))
  38. {
  39. workspaceEdit.StopEditOperation();
  40. workspaceEdit.StopEditing(true); // This line causing the increase in memory but the same memory doesn't get released.
  41. ReleaseComReferences(workspaceEdit);
  42. }
  43.  
  44. ReleaseComReferences(featureCursor);
  45. ReleaseComReferences(workspace);
  46. ReleaseComReferences(featureClass);
  47. ReleaseComReferences(outputFeatureCursor);
  48. ReleaseComReferences(outputFeatureBuffer);
  49. ReleaseComReferences(outputWorkspace);
  50. ReleaseComReferences(outputFeatureClass);
  51. ReleaseComReferences(workspaceFactory);
  52. }
  53.  
  54. public void ReleaseComReferences(object refernce)
  55. {
  56. if (refernce != null)
  57. {
  58. int refsLeft = 0;
  59. do
  60. {
  61. refsLeft = System.Runtime.InteropServices.Marshal.ReleaseComObject(refernce);
  62. }
  63. while (refsLeft > 0);
  64. }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement