Cocoa Memory Management IKImageBrowserView

I use IKImageBrowserView in my application, if I add a lot of photos, the application stops working, and in the profiler I see that the allocated memory is too high. I need to somehow optimize it. here is my browser:

public class BrowseItem : IKImageBrowserItem { // ..... public override NSString ImageRepresentationType { get { return IKImageBrowserItem.NSURLRepresentationType; } } public override NSObject ImageRepresentation { get { return NSUrl.FromFilename (_path); } } } 

and data source:

 public class BrowseData : IKImageBrowserDataSource { string _arrangeBy; List<BrowseItem> images; List<string> DateGroup { get; set; } public override void Invoke (Action action, double delay) { base.Invoke (action, delay); } public BrowseData (string arrangeBy) : base () { _arrangeBy = arrangeBy; images = new List<BrowseItem> (); } public void FillItems (IEnumerable<BrowseItem> data) { if (data != null) { switch (_arrangeBy) { case "Month": DateGroup = data.Select (x => x.Month).Distinct ().ToList (); break; case "Year": DateGroup = data.Select (x => x.Year).Distinct ().ToList (); break; default: DateGroup = data.Select (x => x.Day).Distinct ().ToList (); break; } images = data.ToList (); } } #region Required IKImageBrowserDataSource methods public override nint GroupCount (IKImageBrowserView aBrowser) { return DateGroup.Count; } public override NSDictionary GetGroup (IKImageBrowserView aBrowser, nint index) { var dateHeader = DateGroup [(int)index]; NSRange range = GetIndexByGroup ((int)index, dateHeader); #region Objects var rangeValue = NSValue.FromRange (range); var styleValue = NSNumber.FromNInt ((int)IKGroupStyle.Disclosure); NSString titleValue = new NSString (dateHeader); #endregion var objs = new NSObject [] { rangeValue, titleValue, styleValue }; var keys = new string [] { GroupRangeKey, GroupTitleKey, GroupStyleKey }; return NSDictionary.FromObjectsAndKeys (objs, keys); } public override nint ItemCount (IKImageBrowserView aBrowser) { return images.Count; } public override IIKImageBrowserItem GetItem (IKImageBrowserView aBrowser, nint index) { return images [(int)index]; } #endregion public BrowseItem GetItemByIndex (int index) { return images [index]; } NSRange GetIndexByGroup (int index, string dateHeader) { BrowseItem item; var indexOfItem = 0; int count = 0; switch (_arrangeBy) { case "Month": item = images.First (x => x.Month == dateHeader); count = images.Count (x => x.Month == dateHeader); break; case "Year": item = images.First (x => x.Year == dateHeader); count = images.Count (x => x.Year == dateHeader); break; default: item = images.First (x => x.Day == dateHeader); count = images.Count (x => x.Day == dateHeader); break; } indexOfItem = images.IndexOf (item); return GetRange (indexOfItem, count); } NSRange GetRange (int index, int count) { NSRange range = new NSRange (index, count); return range; } } 

profiling results: enter image description here

+5
source share

Source: https://habr.com/ru/post/1259680/


All Articles