// 回收一个引用类 public void Release(IBaseReference type) { if (referencePool.TryGetValue(type.GetType(), out Stack <IBaseReference> iReferences)) { type.Clear(); int count = 3; // 默认存三个 CountLimitAttribute attr = type.GetType().GetCustomAttribute <CountLimitAttribute>(); if (null != attr) { count = attr.Count; } if (iReferences.Count < count) //超过指定个数就不要了 { iReferences.Push(type); } else { type = null; } } else { Debug.LogError(type.GetType().Name + "不是通过类引用创建,请检查!!!"); } }
//清除指定缓存对象 public void ClearOneType(IBaseReference type) { Type t = type.GetType(); if (referencePool.TryRemove(t, out Stack <IBaseReference> iReferences)) { iReferences.Clear(); } }
/// <summary> /// Initializes a new instance of the <see cref="WeavingContext"/> class. /// </summary> /// <param name="module">The module that this weaving context is for.</param> public WeavingContext(ModuleDefinition module) { this.module = module ?? throw new ArgumentNullException("module"); baseReference = ReferenceFactory.InitializeBaseReference(module); ExecutionSwitches = SwitchFactory.InitializeSwitchSet(); ReturnSwitches = SwitchFactory.InitializeSwitchSet(); ExecutionContextSwitches = SwitchFactory.InitializeSwitchSet(); ExecutionVariableSwitchableSection = SwitchFactory.InitializeSwitchableSection(); ReturnVariableSwitchableSection = SwitchFactory.InitializeSwitchableSection(); ReturnFinallySwitchableSection = SwitchFactory.InitializeSwitchableSection(); ExecutionContextVariableSwitchableSection = SwitchFactory.InitializeSwitchableSection(); }
private void Init2Gis() { try { pGrymCore = new Grym(); pBaseRef = pGrymCore.BaseCollection.FindBase("Челябинск"); pBaseView = pGrymCore.GetBaseView(pBaseRef, true, false); pBaseView.Activate(3); //на весь экран Focus(); } catch (Exception ex) { MessageBox.Show(Resources.InitErrorMsg + ex.Message, @"Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public DGisContext(string city) { // Создаем объект приложения Grym. // Если приложение не было запущено, то при // первом же обращении к объекту оно запустится. _grymApp = new GrymClass(); // Получаем описание файла данных для заданного города // из коллекции описаний. _baseRef = _grymApp.BaseCollection.FindBase(city); if (_baseRef == null) { throw new ArgumentException($"Файл данных указанного города \"{city}\" не найден"); } // Получаем оболочку просмотра данных по описанию файла данных _baseViewTread = _grymApp.GetBaseView(_baseRef, true, false); if (_baseViewTread == null) { throw new Exception("Не удалось запустить оболочку просмотра данных"); } // Получение объекта Города var cityTable = _baseViewTread.Database.Table["grym_map_city"]; for (var i = 1; i <= cityTable.RecordCount; i++) { _cityDataRow = cityTable.GetRecord(i); var cityValue = (IDataRow)_cityDataRow.Value["city"]; if ((string)cityValue.Value["name"] == city) { break; } } if (_cityDataRow == null) { throw new Exception("Не удалось найти объект города для выполнения запросов"); } }