|   |   | 
| 
 | 1С 8.3 жрет память | ☑ | ||
|---|---|---|---|---|
| 0
    
        alexei366 27.06.13✎ 15:06 | 
        Есть у меня форма, на ней кнопка, действие выполняется на клиенте, грузится картинка с диска, далее во временное хранилище и в реквизит строка, который отображается как поле картинки. Также перед покладкой во врем хранилище я его сначала очищаю. 
  В итлге жмем на кнопу 100 раз, в диспетчере задач наша 1С уже щанимает около 500 МБ, закрываем форму а память не освобождается. В чем трабла, что не так я делаю? | |||
| 1
    
        fmrlex 27.06.13✎ 15:08 | 
        (0) А 8.2 как себя ведет?     | |||
| 2
    
        alexei366 27.06.13✎ 15:10 | 
        (1) Не пробывал, думаю также если по приведенному примеру     | |||
| 3
    
        ДенисЧ 27.06.13✎ 15:11 | 
        1с жрёт память, а вы кактусы...     | |||
| 4
    
        arsik гуру 27.06.13✎ 15:11 | 
        (0) А бубен? Бубен то тряс?     | |||
| 5
    
        Gorgol 27.06.13✎ 15:13 | 
        (0) Если на клиенте много свободной памяти, то почему бы и нет. Попробуй сделать это же в виртуалке, где памяти у всех приложений будет 200 метров.     | |||
| 6
    
        fmrlex 27.06.13✎ 15:13 | 
        (2) Ну дык попробуй. Запусти под 8.2 свое поделие.     | |||
| 7
    
        Лефмихалыч 27.06.13✎ 15:15 | 
        Сердитый мужик в аптеке: Ваши презервативы рвутся!
  Голос из очереди: А еще мнутся и гнутся... ЗЫ вы как-то не так и не то делаете просто | |||
| 8
    
        alexei366 27.06.13✎ 15:15 | 
        (5) Так чо теперь пусть хоть 2 Гига занимает, чтоб картинки полистать из каталога? этож бред     | |||
| 9
    
        alexei366 27.06.13✎ 15:15 | 
        (7) Так давай скажи как правильно, яж этого и хочу     | |||
| 10
    
        pmb 27.06.13✎ 15:17 | 
        (0) картинка - двоичные данные? Переменная в которую грузиться картинка не очищается     | |||
| 11
    
        alexei366 27.06.13✎ 15:17 | 
        Корочь, если не ложить получаемый адрес хранилища в реквизит (то есть не выводить картинку), то память жрется соответствующая размеру картинки помноженному на 10 наверно, но не на 500 как в случае если выводить     | |||
| 12
    
        alexei366 27.06.13✎ 15:18 | 
        (10) Это локальная переменная функции     | |||
| 13
    
        pmb 27.06.13✎ 15:19 | 
        (12) она и не очищается. Очисть ее явно в конце процедуры     | |||
| 14
    
        H A D G E H O G s 27.06.13✎ 15:19 | 
        Расслабтесь.
  Потом, когда дойдет до 800 метров - она тупо не будет отображать новые картинки, а потом через пару десятков секунд сбросит память до 50 метров. | |||
| 15
    
        Fragster гуру 27.06.13✎ 15:20 | 
        мусорщик 1с ну очень не любит циклические ссылки     | |||
| 16
    
        Fragster гуру 27.06.13✎ 15:20 | 
        хз, как в 8.3, может бага, но вообще - в техножурнале можно отследить, на каких конкретно строчках и переменных течет.     | |||
| 17
    
        alexei366 27.06.13✎ 15:22 | 
        (15) Что ты конкретно имел ввиду     | |||
| 18
    
        pmb 27.06.13✎ 15:22 | 
        (16) как это сделать? События LEAKS и MEM только для сервера выводятся (по крайней мере в 8.2)     | |||
| 19
    
        pmb 27.06.13✎ 15:22 | 
        (17) покажи код модуля     | |||
| 20
    
        alexei366 27.06.13✎ 15:27 | 
        (19) Держи
  &НаКлиенте Перем ПолеКартинку2; &НаКлиенте Процедура Тест(Команда) Если Не (ПолеКартинку = "") Тогда УдалитьИзВременногоХранилища(ПолеКартинку2); КонецЕсли; ПолеКартинку2 = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные("C:\12\jpg.jpg"), ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры | |||
| 21
    
        pmb 27.06.13✎ 15:28 | 
        попробуй так 
  а = Новый ДвоичныеДанные("C:\12\jpg.jpg"); ПолеКартинку2 = ПоместитьВоВременноеХранилище(а, ЭтаФорма.УникальныйИдентификатор); а = Неопределено; | |||
| 22
    
        alexei366 27.06.13✎ 15:34 | 
        (21) Ну пипец, в натуре работает, типа "а = Неопределенно" эт у нас а.Dispose() в c#.
  Я то думал оно должно какнить само раз объявленно в рамках функции, да и при закрытии тож нифига блин | |||
| 23
    
        alexei366 27.06.13✎ 15:34 | 
        (21) Ща попробую с выводом картинки     | |||
| 24
    
        Asmody 27.06.13✎ 15:42 | 
        (21) вот такой в 1Ске х.вый сборщик мусора     | |||
| 25
    
        hhhh 27.06.13✎ 15:44 | 
        (22) если написал
  ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные("C:\12\jpg.jpg") значит поместил во временное хранилище. Значит, не должна эта память освобождаться. ВСё правильно делает. | |||
| 26
    
        Asmody 27.06.13✎ 15:45 | 
        (25) а вот тут должна? УдалитьИзВременногоХранилища(ПолеКартинку2)     | |||
| 27
    
        Fragster гуру 27.06.13✎ 15:47 | 
        (18) на клиенте тоже есть техножурнал, только тссс!     | |||
| 28
    
        alexei366 27.06.13✎ 15:49 | 
        (25) А метод удалить ты не видел в моем коде?     | |||
| 29
    
        Фрэнки 27.06.13✎ 15:50 | 
        (28)
  Если Не (ПолеКартинку = "") Тогда УдалитьИзВременногоХранилища(ПолеКартинку2); КонецЕсли; что-то очень похоже, что условие забито криво. ПолеКартинку и ПолеКартинку2 это разные переменные | |||
| 30
    
        alexei366 27.06.13✎ 15:51 | 
        Такс если выводить картинку, то он начинает на каждый щелчок по 50 метров жрать, но както всетаки потом очищает, кидает её периодически с 700 Метров до 200     | |||
| 31
    
        alexei366 27.06.13✎ 15:52 | 
        (29) Да знаю знаю, я потом исправил, принимай что условие верное было, оно вообще нужно чтоб первый раз с исключением не вылетело     | |||
| 32
    
        pmb 27.06.13✎ 15:52 | 
        (27) если честно то поиск утечек памяти в нем криво работает - выводит кучу событий, которые "потенциально" могут быть утечкой. 
  В то же время была похожая ситуация как у автора, так событие подобное Новый ДвоичныеДанные("C:\12\jpg.jpg") вообще не попало в журнал | |||
| 33
    
        alexei366 27.06.13✎ 15:56 | 
        Ну вроде чуток понятно стало, с переменными в теле функции надо самому разбираться типа приравнивая их к Неопределенно, а с элементом формы сборщик мусора разбирается (Вроде так)     | |||
| 34
    
        Фрэнки 27.06.13✎ 15:59 | 
        (33) угу.
  а вообще все на 7.7 еще началось. когда в любом маломальски критичном по памяти месте, при выходе из контекста считалось хорошим тоном выполнить А=0 , которое в 8-ке чаще всего заменяют на А=Неопределено. По сути, это просто назначение нового указателя в памяти... Исходники надо смотреть, чтоб выводы делать, есть деструкторы объектов и как собирается мусор при выдаче переменной нового объекта. А=Неопределено это тоже операция, которая из-за преобразования типа тянет за собой деструктор для прежнего объекта и новый конструктор для текущего присвоения. | |||
| 35
    
        Фрэнки 27.06.13✎ 16:02 | 
        И на элементы форм не сборщик мусора вешается, а автоматический вызов деструкторов при удалении родителя. Т.е. я к тому, что это не совсем настоящие сборщики.     | |||
| 36
    
        alexei366 27.06.13✎ 16:28 | 
        (35) Ну родитель у элемента это форма, а её я не закрываю     | |||
| 37
    
        hhhh 27.06.13✎ 16:33 | 
        (28) так ведь там бред написан
  Если Не (ПолеКартинку = "") Тогда причем ПОлеКартинку нигде не видно, что оно равно пробелу поэтому я и не обратил внимание на это удалить, потому что оно выполнится с вероятностью 10%. | |||
| 38
    
        alexei366 27.06.13✎ 16:48 | 
        (37) Это реквизит формы типа строка     | |||
| 39
    
        alexei366 27.06.13✎ 16:48 | 
        (37) И оно выполняется, я проверял     | |||
| 40
    
        Фрэнки 27.06.13✎ 17:04 | 
        (36) тогда это ответ на то, почему встроенная "сборка мусора" не работает.     | |||
| 41
    
        Pilokarpios 27.06.13✎ 18:50 | 
        (40) у меня IIS7 уже два раза упал когда я 1с83 насиловал!!! он у меня для тестов, всего 3 гига оперативы, но всегда тянул небольшое количество юзеров, а то прям захлебнулся бедняга, чую еще сырого много!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |