 |
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
01.05.2015, 18:28
|
#2101
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от ILonion
У меня ситуация, когда одномерный массив постоянного размера очень часто создается и удаляется (эмпирически). Как я понял в c# лучше всего не удалять, а переиспользовать. Значит мне необходимо его очищать. Вопрос: каким макаром это делать максимально быстро? Array.Clear()? или при каждом новом заходе new? (если второе, то что происходит с предыдущим массивом? он становится бессылочным и его будет ждать GC?);
|
А что значит часто создается и удаляется? Тебе этот массив нужен как временная вспомогательная структура ? Или как например список игроков ?
__________________
|
(Offline)
|
|
01.05.2015, 22:24
|
#2102
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
У меня одномерным массивом описана трехмерная матрица положений объектов в 3д пространстве (кубик рубика). Достаточно большая - 14^3.
При определенных условиях часть массива (плоскость элементов, т.е. 14^2) срезается с "одной стороны" и добавляется с "другой", по разным осям (как торт отрезать). Все "среднее" содержимое тоже как бы "сдвигается", поэтому, в работе весь массив 14^3.
в блитце реализовывал чере bbBank. там копировал массив во времянку, потом разом удалял (freebank) весь оригинальный массив, пересоздавал на лету, и заливал (copybank) с нужным смещением "плоскости" , из массива времянки.
|
(Offline)
|
|
03.05.2015, 00:26
|
#2103
|
Знающий
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений (для 229 пользователей)
|
Ответ: Вопросы от новичка
вопрос на базовую логику действия программы, надеюсь просветите.
Предположим я создаю экземпляр класса через определенный ранее конструктор
Primer = new PrimerClass(1,2,3);
затем я снова создаю экземпляр класса абсолютно по такому же принципу и в тот же объект (правильно называю надеюсь?)
Primer = new PrimerClass(4,5,6);
Что случится с первым экземпляром класса? Логика подсказывает что сущность будет уничтожена, но интересует все-таки мнение экспертов, что с ней происходит? Она просто замещается вторым экземпляром или их становится две?
|
(Offline)
|
|
03.05.2015, 00:37
|
#2104
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Вопросы от новичка
Если ссылка на первый объект есть где-нибудь ещё (например, до создания второго экземпляра была строчка PrimerOld = Primer), то он не удалится.
Если ссылки на него не будет, сборщик мусора его уберёт когда-нибудь.
Ещё есть нюанс со структурами - они, кажется, копируются и передаются по значению - т.е., в коде типа var p = new Point(1,2) новые значения полей x и у будут записаны прямо поверх старых. Сборщик мусора для структур не вызывается - можно провести аналогию с переменными типа int - их явно никто не собирает, потому что они или на стеке или в составе другого объекта.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.05.2015, 02:05
|
#2105
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Подскажите, пожалуйста, правильно ли будет в данном случае использовать .Close() ?
А то заморочили тут голову: https://msdn.microsoft.com/ru-ru/lib...eam.close.aspx
byte[] bank = new byte[100]; string filename = @"\dat.dat"; /// string save_path = Directory.GetCurrentDirectory() + filename; if (File.Exists(save_path)) { writer = new BinaryWriter(File.Open(save_path, FileMode.Open)); { writer.Seek(0,SeekOrigin.End); writer.Write(bank); writer.Close(); } }
|
(Offline)
|
|
04.05.2015, 14:14
|
#2106
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: Вопросы от новичка
Файл закрыть точно надо.
Но, имхо - используй using и не парься. Зря его что-ли выдумали.
using(FileStream fs = File.Open(save_path, FileMode.Open))
{
using(BinaryWriter = new BinaryWriter(fs))
{
...
}
}
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.05.2015, 15:08
|
#2107
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: Вопросы от новичка
Мало того что файл закрыть надо, надо еще Flush вызвать у райтера.
А вообще эта конструкция мне несовсем понятна:
writer.Seek(0,SeekOrigin.End);
Зачем ?
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.05.2015, 15:25
|
#2108
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
А, понял. using гарантированно вызывает Dispose для неуправляемых. Так и сделаю, большое спасибо!
|
(Offline)
|
|
04.05.2015, 15:28
|
#2109
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от h1dd3n
Мало того что файл закрыть надо, надо еще Flush вызвать у райтера.
А вообще эта конструкция мне несовсем понятна:
writer.Seek(0,SeekOrigin.End);
Зачем ?
|
>>Flush - ясно. тем более нужен using)
>>writer.Seek(0,SeekOrigin.End); Зачем ? - мой фрагмент вырван из контекста. файл предполагается дозаписывать. Или он по умолчанию автоматом в конец писать будет?
|
(Offline)
|
|
04.05.2015, 23:43
|
#2110
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
А вот такой вопрос. Вот здесь: https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx указано, что начиная с net 2 класс Array реализует интерфейс IList, с одной стороны, но "...члены, добавляющие, вставляющие или удаляющие элементы выбрасывают исключение NotSupportedException." с другой.
Как же все-таки в c# реализовать добавление (не знаю какой будет размер массива в процессе выполнения) и удаление элементов (актуальный список) одномерного массива? Только через Array.Resize ?
|
(Offline)
|
|
05.05.2015, 00:31
|
#2111
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: Вопросы от новичка
List<T>
Под капотом там просто алгоритм который хранит внутри себя массив, и при добавлении элементов если массив слишком мал, создает новый и копирует туда элементы исходного (автоматом, разумеется).
>>writer.Seek(0,SeekOrigin.End); Зачем ? - мой фрагмент вырван из контекста. файл предполагается дозаписывать. Или он по умолчанию автоматом в конец писать будет?
|
var stream = File.Open(path, FileMode.Append);
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.05.2015, 00:32
|
#2112
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: Вопросы от новичка
Используйте List<T>, если часто меняется размер.
Ну или ArrayList, если не хотите дженерики.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.05.2015, 00:51
|
#2113
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Благодарствую, seaman, h1dd3n!
|
(Offline)
|
|
05.05.2015, 16:11
|
#2114
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Ответ: Вопросы от новичка
Вопрос по анимации характерной для именно кат-сцен.
1. Как в юнити сделать анимацию камеры для кат-сцены?
2. Как вообще проще всего в юнити сделать кат-сцену используя лишь его родной функционал? (на всякий случай, вдруг я чего не знаю)
|
(Offline)
|
|
05.05.2015, 19:21
|
#2115
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопросы от новичка
1. Как в юнити сделать анимацию камеры для кат-сцены?
|
Заходишь в Window > Animation. Открывается окно, выбираем камеру и в появившемся окне жмем на красный кружок, а далее указываем имя и папку для анимации и как в 3дмаксе двигаем камеру, указываем ключи и по окончании создании анимации снова жмем на красный кружок в окне Animation. И через анимацию можно вообще все менять у объектов даже тип проекции камеры.
2. Как вообще проще всего в юнити сделать кат-сцену используя лишь его родной функционал? (на всякий случай, вдруг я чего не знаю)
|
Например так:
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:18.
|