Notesstream

  • Автор темы Jansar
  • Дата начала
J

Jansar

#1
Добрый день!
какую память используется NotesStream? только оперативную или + еще виртуальную(файл подкачки) ?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#2
Jansar
странный вопрос
я стриамом файлы создаю, поэтому он у меня прямо в файл пишет, какую память я использую? ;)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#3
виртуальную(файл подкачки)
вы путаете АПИ приложения и уровень ОС
никто не укажет - когда ОС задумает юзать подкачку
под стримы - выделяется буфер в памяти, по-мере исчерпания буфера - часть сбрасывается в файл
если стрим без привязки к файлу (в LS)... - я не знаю как его реализовывали (может чисто в памяти, а может со врЕменными файлами)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#5
а если я запретил использовать файл подкачки то что будет? :D
 
J

Jansar

#7
если в стрим не файлы ложить а строки, будет ли использоваться файл подкачки когда будет заполнен буфер памяти?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#9
рассмотрим две ситуации:
1 - платформа юзает файловый вывод и не буферизирует
2 - платформа организует свой буфер, а как буферизирует ОС - пох
1-ый вариант - физ. память заканчивает, одно из первых что сделает ОС - покоцает файловые буфера (хотя - ОС бывают разные :gigi: )
2 - ой вариант более вероятен приложение жрет буфер до заполнения, а ёйный буфер - в памяти приложения
память приложения, условно - приоритетна для ОС, и ежели приложению не хватает физ. памяти - начнется своп
НО буфера для стримов врядли очень большие, вопрос остаётся к стримам без явного файла
в любом случае - решение об использовании файла подкачки - зона ответственности ОС (никак не домины)
 
J

Jansar

#10
в общем задача такая у нас:
вычислить чем конкретно ограничен лимит у String и у NotesStream и чему он равее для определенного компа(допустим с ОЗУ 2гб). notes help говорит Limited by available memory.
сделали агента, в цикле запихиваем в NotesStream (не используя файл) строки пока не выйдет ошибки string out of space, получаем определенный размер (в мб) NotesStream на этом компе на котором ошибка не выходит. Не можем понять от чего зависит этот размер, откуда и сколько выделяется для стрима памяти, что происходит при переполнении, увеличивает откуда-то еще втягивает что-то?, и в конечном итоге когда ресурсы закончились выкидывает string out of space.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#11
если вы об очень больших объемах...
надо помнить, что память доступная приложению, на хэ86, 32бит, в упрощённом случае - 2Гб
вычитайте из этого объёма внутренние нужды LDN
разумеется, каков бы не был своп - это остаётся "потолком"
 
J

Jansar

#12
если вы об очень больших объемах...
я запускаю агента на своем компе, заранее замеряю параметры памяти
в диспетчере задач такие параметры, данные меняются но приблизительно такие:
Физ память
всего 2 092 228 КБ
доступно 1 406 960 КБ
системный кэш 426 450 КБ

выделено памяти
Всего 949 312 КБ
предел 4 032 564 КБ
пик 1 868 612 КБ

ОЗУ = 2ГБ
файл подкачки = 2ГБ

собираю в строку текст, размер (функция lenb) строки = 300мб, смотрю в диспетчере, показывает
Физ память
всего 2 092 228 КБ
доступно 1 097 960 КБ
системный кэш 426 450 КБ

выделено памяти
Всего 1 258 312 КБ
предел 4 032 564 КБ
пик 1 868 612 КБ

жирным отметил то что изменилось, от сюда вывод что 300мб которые держу в переменной выделил из физической памяти 300мб, еще остается приблизительно 1гб
Теперь, запускаю агента на 500мб выходит ошибка string out of space. Вот тут вопрос возникает: почему? есть же еще 1гб, почему он их не взял.
может системный кэш какую-то роль сыграл здесь, даже если брать минус системный кэш, то все равно остается еще 500мб, должно быть ограничение для переменной в 1,3ГБ либо (с минусом системного кэша) 900мб. приблизительно так.
может я не правильно понимаю данные которые показывает диспетчер задач!? :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#13
диспетчер - не лучший инструмент, смотрите утили Руссиновича http://technet.microsoft.com/ru-ru/sysinternals/default
при том - вы не видите - сколько реально занимают нотуса (вместе с заюзанными длл системы, ведь они работают в контексте приложения)
не знаете, также, накладных расходов на объект
 

Мыш

Премиум
12.02.2008
1 092
10
#14
Вот коллега правильно говорит:
надо помнить, что память доступная приложению, на хэ86, 32бит, в упрощённом случае - 2Гб
2 Gb - это и есть "available memory" для 32-битной версии. Под какие свои задачи и какими блоками Лотус эту память выделяет внутри себя - одному Шиве известно :) Скорее всего, существует некий внутренний буфер ограниченного размера. Вышли за его пределы - получИте "Out of space".