Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 3

Время жизни экземпляра класса

26.10.2016, 20:02. Показов 2127. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня реализован некоторый класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class AjPosition
{
    public int ajIndex;
 
    public virtual bool Compare(AjPosition value)
    {
        return true;
    }
 
    public int ToInt()
    {
        return ajIndex;
    }
}
 
public class CLeft : AjPosition {
    
    public CLeft()
    {
        this.ajIndex = -1;
    }
 
    public override bool Compare(AjPosition value)
    {
        return this.ajIndex == value.ajIndex ? true: false;
    }
}
 
public class CRight : AjPosition
{
 
    public CRight()
    {
        this.ajIndex = 1;
    }
 
    public override bool Compare(AjPosition value)
    {
        return this.ajIndex == value.ajIndex ? true : false;
    }
}
И у меня вопрос, как долго живёт экземпляр класса CLeft(), вызванный в качестве параметра функции?
C#
1
2
CRight someVar = new CRight();
someVar.Compare(new CLeft());
Получается при каждом вызове функции Compare() создаётся новый экземпляр класса и при завершении выполнения функции он остаётся в памяти? Вообще допустим ли такой вызов или сборщик мусора неохотно освобождает память в этой ситуации?
Можно сделать что-то вроде:
C#
1
2
CLeft left = new CLeft();
someVar.Compare(left);
но хотелось бы обойтись без лишних переменных.
Заранее спасибо за ответ
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.10.2016, 20:02
Ответы с готовыми решениями:

Время жизни экземпляра при добавлении в коллекцию
class Cl { public int i; public Cl(int a) { i = a; } } //... ...

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая: Создать отдельный экземпляр класса для...

Создание экземпляра класса-наследника для переменной с типом базового класса
Подскажите чайнику как создается экземпляр класса BC BaseClass BC = new DerivedClass(); Вопрос: BC - это экземпляр класса BaseClass...

6
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.10.2016, 20:06
Лучший ответ Сообщение было отмечено 2day как решение

Решение

Цитата Сообщение от 2day Посмотреть сообщение
создаётся новый экземпляр класса и при завершении выполнения функции он остаётся в памяти
Да, он создается, после возврата из метода он будет собран сборщиком мусора.
1
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 3
26.10.2016, 20:12  [ТС]
Если скажем вызовов будет несколько десятков или сотен в секунду, сборщик успевает подчищать хвосты, или стоит всё таки быть аккуратнее с подобным вызовом?
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
26.10.2016, 20:16
2day, лучше всегда быть аккуратным с любыми вызовами. Дополнительная самостраховка от возможных проблем никогда не будет лишней.
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.10.2016, 20:17
Цитата Сообщение от 2day Посмотреть сообщение
Если скажем вызовов будет несколько десятков или сотен в секунду
Если это так критично, попробуйте изменить сигнатуру метода. Передавайте туда не объект, а переменную для сравнения.
1
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 3
26.10.2016, 20:18  [ТС]
Понятно, большое спасибо за ответ!
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.10.2016, 23:59
Лучший ответ Сообщение было отмечено 2day как решение

Решение

Цитата Сообщение от 2day Посмотреть сообщение
при каждом вызове функции Compare() создаётся новый экземпляр класса и при завершении выполнения функции он остаётся в памяти?
Да, создается.
Может быть остается, а может и нет — зависит от сборщика мусора.

Цитата Сообщение от 2day Посмотреть сообщение
Вообще допустим ли такой вызов или сборщик мусора неохотно освобождает память в этой ситуации?
Вызов допустим, в такой ситуации сборщик освобождает память даже охотнее, чем при использовании переменной.
Например, он вполне может освободить память даже до завершения работы метода Compare, если переданный объект уже не используется.

Цитата Сообщение от 2day Посмотреть сообщение
хотелось бы обойтись без лишних переменных.
Почему?

Цитата Сообщение от 2day Посмотреть сообщение
Если скажем вызовов будет несколько десятков или сотен в секунду, сборщик успевает подчищать хвосты, или стоит всё таки быть аккуратнее с подобным вызовом?
Сборщик освобождает память по мере надобности. Например, если вы пытаетесь создать объект, а памяти не хватает, то сборщик сначала подчистит память, а потом создаст объект (или выбросит OutOfMemoryException, если памяти нет и после сборки).
Однако, сборка памяти тоже занимает какое-то время, так что создавая сотни краткоживущих объектов в секунду, вы косвенно просаживаете производительность.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2016, 23:59
Помогаю со студенческими работами здесь

Обращение к методу дочернего класса из экземпляра родительского класса
Как обратиться к методу дочернего класса из экземпляра родительского класса? К примеру здесь как обратиться к Method, Translate static...

Доступ к свойствам экземпляра класса из другого класса
Здравствуйте! У меня возникла программа с написанием программы на C#. "Реализовать набор классов, описывающих студента (с успеваемостью)...

Создание экземпляра класса
Как написать класс class Class1 Class1(int x1,int x2) { ........ } так чтобы при вызове

Удаление экземпляра класса
нужно при помощи кнопки удалить выбранный в treeview экземпляр класса. объявление массивов List<AnimalTip> tipAnimalList = new...

Создание экземпляра класса
Народ, можете пожалуйста доходчиво объяснить в чем разница. есть, например, класс class MyClass { public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru