Re[3]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 19:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, andrey.bond, Вы писали:


AB>>А можно посмотреть код? Уж больно заинтересовала меня это ваша функция...


А>ИМХО ф-й которые возвращают значение, но оно редко используется много в фрейморке. К примеру, MessageBox.Show("Test");


А>Мой код примерно следующий:



А>
А>  Base reductionBase(ref Base _base1, ref Base _base2)
А>  {
А>   // согласованное изменение полей в _base1, _base2 в зависимости от их величин по определенному алгоритму
А>   // локальные переменные в которых хранятся результаты согласования полей
А>   return new Result(локальные_переменные_в_которых_хранятся_результаты_согласования_полей);
А>   //Result, в дальнейшем нужен не всегда
А>  }
А>


Если Result тебе не всегда нужен, а создание лишнего экземпляра тебя так беспокоит, я так понял что Result это очень громоздкий объект и его создание занимает много времени. Тогда зачем-же ты его создаешь когда это не нужно?

Сделал бы так:
    public class SmartAndFastReductor
    {
        private class Reductor
        {
            // переменные в которых хранятся результаты согласования полей
        
            public void reductionBase(ref Base _base1, ref Base _base2)
            {
                // согласованное изменение полей в _base1, _base2 в зависимости от их величин по определенному алгоритму
                // вместо локальных переменных используются переменные класса Reductor
            }

            public Base Result { get { return new Result(переменные_класса_Reductor_в_которых_хранятся_результаты_согласования_полей); } }
        }

        public Base ReductionBaseWithResult(ref Base _base1, ref Base _base2)
        {
            Reductor reductor = new Reductor();
            reductor.reductionBase(ref _base1, ref _base2);
            return reductor.Result;                                                    // экземпляр Result будет создаваться только в случае крайней необходимости
        }

        public void ReductionBaseWithoutResult(ref Base _base1, ref Base _base2)
        {
            Reductor reductor = new Reductor();
            reductor.reductionBase(ref _base1, ref _base2);
        }
    }


Когда не нужно создание Result — вызывай ReductionBaseWithoutResult и тогда время не будет тратиться на медленную операцию создания Result...
... << RSDN@Home 1.2.0 alpha rev. 676>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.