Re[3]: быстрый ToEnumerable
От: tyomchick Россия  
Дата: 23.04.15 17:10
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>У тебя два класса. Один элемент структурой оборачивать надо.

Кстати, если сочинить такой сам себе итератор:

 internal struct Single<T> : IEnumerable<T>, IEnumerator<T>
    {
        private readonly T _value;
        private bool _isEnumerated ;

        public Single(T value)
        {
            _value = value;           
            _isEnumerated = false;
        }

        public IEnumerator<T> GetEnumerator()
        {
            Reset();
            return this;
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            Reset();
            return this;
        }
              
        public T Current
        {
            get { return _isEnumerated ? _value : default(T); }
        }

        
        object IEnumerator.Current
        {
            get { return Current; }
        }

        public bool MoveNext()
        {
            if (_isEnumerated)
            {
                return false;
            }
            else
            {
                _isEnumerated = true;
                return true;
            }
        }

        public void Reset()
        {
            _isEnumerated = false;
        }

        public void Dispose() { }        
    }


то я получаю такой результат:

Time: 608, Memory GC: 1301792, Memory WS: 2473984

Т.е. большая нагрузка на кучу сохраняется.
Получается объект всё равно в кучке создается или просто при приведении к интерфейсу всё равно боксинг происходит?
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.