| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Как удалить массив |
| Автор: agealex 8.10.2007, 10:04 | ||
Есть массив переменной длины в зависимости от содержимого вызываемой функции, по этому приходится создавать его постоянно с параметром new, как его удалить ? в С++ был delete [] ... ; а есть ли аналог в шарпе?
|
| Автор: ivashkanet 8.10.2007, 10:10 |
| agealex, 1) это не твои вопросы. Все сделает сборщик мусора (если все же считаешь их своими, то можно вызвать его принудительно: GC.Collect(); (вроде так)) 2) Возможно тебе подойдет саморастущая коллекция (почти массив): List<T> |
| Автор: agealex 8.10.2007, 10:15 |
| Запустить нужно один раз или тоже в цикле? |
| Автор: ivashkanet 8.10.2007, 10:33 |
| agealex, в момент вызова GC.Collect(); сборщик мусора приступает к работе. Так что тебе нужно в цикле. Но ты учти, что будут собраны все "неживые" объекты, а не только твой массив. Так что первый запуск может "подтормаживать". А вообще не заморачивайся. Я "кидаю" мегабайтные объекты и ничего. А ты на килобайтные смотришь... P.S. Если распишешь задачу подробнее может найдём другое решение... |
| Автор: zaver 8.10.2007, 10:51 |
| да кстати GC заметно хавает ресурсы во время работы. ИМХО тебе не стоит его вызывать, он сам все делает за тебя, если утечки памяти и бывают то уж не его вине. я уже давно не забочусь о памяти, т.к. запустив диспетчера задач, сразу вижу что GC не дает памяти подыматься более чем на ~30% от первоночальной. редко бывают случаи когда есть утечки памяти, но это уже не по его вине. |
| Автор: agealex 8.10.2007, 12:25 |
| Ну в моем случае количество памяти очень важно, прога на кпк должна работать а там места мало, програмка усиленно засерает память, пытаюсь найти в каком месте , вот думаю может в этом |
| Автор: zaver 8.10.2007, 13:01 |
| зачастую память засирается (т.е. так что GC никак не помогает) в том случае, если ты посотянно создаешь новые объекты, так что ссылки на старые не теряются, например сохраняются в списке или массиве и причом это может быть неявно. например, в XNA часто встречал такое, что создаются объекты каждый раз при прорисовке, я думал, что они удаляются (у меня в коде нигде не было "живих" указателей), а на самом деле какой-то библиотечный объект их просто "складировал" в свой список и молчал |
| Автор: ivashkanet 8.10.2007, 13:40 |
Да, тут это важнее... Может профайлер? Вот тут их куча: http://sharptoolbox.com/categories/profilers-debuggers Но большинство платные. Лично я пользовался ANTS (триал на 14 дней) -- очень понравился. |
| Автор: agealex 8.10.2007, 14:38 |
| Все. Спасибо нашел, оказывается зря на шрап грешил, нашел ошибку в коде. |
| Автор: VisualProgrammerNET 11.10.2007, 00:40 |
| Что мешало объявить массив нулевым до цикла и потом использовать его одного всегда? |
| Автор: ivashkanet 11.10.2007, 09:53 |
| VisualProgrammerNET, а смысл? Оптимизатор компиляции все равно вынесет объявление переменной за пределы цикла. (А даже если не вынесет, то этот вызов ничего не стоит для системы). Не стоит путать "указатель" на массив и сам массив, физически расположенный в памяти (кот всегда разный). |
| Автор: 1stain 7.11.2007, 12:47 | ||
а что тебе мешает создавать массив байт в стеке - и быстродействие будет повыше и сборщег мусора ни причем...
|
| Автор: lankin 8.11.2007, 05:27 | ||||
А можно подробнее об этом? |
| Автор: 1stain 8.11.2007, 14:15 |
| поподробней - купи книгу и прочитай. ЭТА книга своих денег стоит на 200% |