private IFeature CreateEmptyGeometryFeature(IFeatureWorkspace ws, esriGeometryType geometryType, IGeometry andAlso = null) { ISpatialReference sr = SpatialReferenceUtils.CreateSpatialReference ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95, true); IFeatureClass featureClass = EnsureFeatureClass(ws, geometryType, geometryType.ToString(), sr); IGdbTransaction transaction = new GdbTransaction(); IFeature feature = null; bool inserted = transaction.Execute((IWorkspace)ws, () => { if (andAlso != null) { andAlso.SpatialReference = sr; IFeature nonEmpty = featureClass.CreateFeature(); nonEmpty.Shape = andAlso; nonEmpty.Store(); } feature = featureClass.CreateFeature(); // NOTE: There is no difference when setting an empty geometry feature.Store(); }, "Insert feature"); Assert.IsTrue(inserted); return(feature); }
private static void GetFeaturesInLoop( int count, [NotNull] Func <IFeatureClass, int, IFeature> getFeatureMethod) { IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)TestUtils.OpenSDEWorkspaceOracle(); IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("TOPGIS_TLM.TLM_DTM_MASSENPUNKTE"); IList <int> oids = GetFeatureIDs(featureClass, count); var watch = new Stopwatch(); var memoryUsage = new MemoryUsageInfo(); memoryUsage.Refresh(); watch.Start(); IGdbTransaction gdbTransaction = new GdbTransaction(); gdbTransaction.Execute( (IWorkspace)featureWorkspace, delegate { foreach (int oid in oids) { IFeature feature = getFeatureMethod(featureClass, oid); ComUtils.ReleaseComObject(feature); } memoryUsage.Refresh(); watch.Stop(); Console.WriteLine("Features read: {0}", oids.Count); Console.WriteLine("Memory usage: {0}", memoryUsage); Console.WriteLine("Elapsed: {0:N0} ms", watch.ElapsedMilliseconds); }, "test"); }