• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Обработка коллекции документов

  • Автор темы ABarmin
  • Дата начала
A

ABarmin

Как ни странно, у сервера действительно закончилась память. Начал удалять неиспользуемые объекты из коллекции по мере обработки - все обработалось хорошо. :)
 
A

Akupaka

Уточнение:
На Write - 65K
На WriteText - 2GB
Нет. 65КБ это максимальный объем параметра, передаваемого в функцию! А 2ГБ - это макс. объем всех данных, которые объект может держать. Причем, это для 32-битных систем. Для 64-битных, вероятно, будет 4 ГБ.
 
A

Akupaka

lmike ,
я потому и написал "вероятно", потому что некоторые упоминают про 4 ГБ лимита. Но откуда эта цифра, я не знаю точно... Возможно, какое-то ограничение у Винды...
Вот, к примеру, тут (http://msdn.microsoft.com/en-us/library/aa366778%28v=vs.85%29.aspx) сказано, что 32-битное приложение в 64-битной винде может адресовать до 4ГБ.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
я потому и написал "вероятно", потому что некоторые упоминают про 4 ГБ лимита. Но откуда эта цифра, я не знаю точно... Возможно, какое-то ограничение у Винды...
Вот, к примеру, тут (http://msdn.microsoft.com/en-us/library/aa366778%28v=vs.85%29.aspx) сказано, что 32-битное приложение в 64-битной винде может адресовать до 4ГБ.
никаких вероятностей, 64битная винда в нотесстрим тоже больше 2гиг не бросит
 
A

Akupaka

Короче, Тоха, ты был не прав!
А людя в нете правду писали. Стрим загнал в файл ровно 4 294 971 096 байт и дальше писать перестал.
Самое смешное, что .Bytes при этом отображает какую-то фигню, а не реальный размер :rolleyes:
Причем фигню он начинает показывает после 2 ГБ.

зы: фигня это разница между реальным размером стрима и числом кратным 2 ГБ. Т.е. в моем случае при размере файла 4 294 971 096 байт .Bytes возвращает 3 800, что является разницей между размером файла и числом 4 294 967 296 (2 * 2ГБ).

W7-64, R852
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Самое смешное, что .Bytes при этом отображает какую-то фигню, а не реальный размер :rolleyes:
Причем фигню он начинает показывает после 2 ГБ.

зы: фигня это разница между реальным размером стрима и числом кратным 2 ГБ. Т.е. в моем случае при размере файла 4 294 971 096 байт .Bytes возвращает 3 800, что является разницей между размером файла и числом 4 294 967 296 (2 * 2ГБ).
Да просто .Bytes long возвращает. Потом переполнение происходит.
 
A

Akupaka

Medevic ,
блииин, как давно я не вспоминал рамки типов в скрипте! :rolleyes: А я было подумал, что это внутреннее ограничение поля объекта )))
Иногда, бывает, забываешь такие мелочи...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
как уже написал Medevic наступает перепонение...
вопщем-то скриптовый язык и не должен менять размеров базовых типов...
другое дело, что я не знаю в LS размерности, целогочисленного типа, более Long, в базовом применении
а т.к. оно знаковое - вот и получается херня
хотя 32 бит могут содержать именно 4 294 967 296
что и объясняет лимит стрима (унутре "они" без знака реализовали)
короткий вывод - LS не подходит для современных платформ (в теперяшнем виде), а доработки его уже, я полагаю, не будет. Всем учить java :rolleyes:
И все забавы с нотуснёй, на 64 бит - это извращение, существенных плюсов нет, а вот риск неожиданностей - есть
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
вызов java стрима я уже описывал:
Код:
	Dim FileOS As JAVACLASS, FileOSObj As JavaObject
Set FileOS = jSession.GetClass("java/io/FileOutputStream")
Set FileOSObj= FileOS.CreateObject("(Ljava/lang/String;)V", sPath)
.....
Call FileOSObj.close()
счетчик возвращать будет проблемно (в LS), но запись, я полагаю, будет более 4Гб (если, конечно, ИБМ не накосячило в реализации jvm :rolleyes: )
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Короче, Тоха, ты был не прав!
А людя в нете правду писали. Стрим загнал в файл ровно 4 294 971 096 байт и дальше писать перестал.
Самое смешное, что .Bytes при этом отображает какую-то фигню, а не реальный размер
Причем фигню он начинает показывает после 2 ГБ.
ты смог и внести в стрим и прочитать из него 4 гига? :rolleyes:
 
A

Akupaka

ты смог и внести в стрим и прочитать из него 4 гига?
Что такое, не умеешь признавать неправоту? Надо было сначала протестить, перед тем, как утверждать неизвестное тебе :rolleyes:
64битная винда в нотесстрим тоже больше 2гиг не бросит
а бросила.

А по чтению,так тут вопрос в кривой реализации стрима :) - он больше чем определенный размер не читает, а размер он определяет как указано выше, с учетом переполнения ))
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
ниже работающий вариант, который "класть" хотел на кривые NotesStream :rolleyes:
StringBuffer брать
работает о-о-чень тоскливо (пересылки в памяти LS долгие) оптимизацией и переводом на java не занимался
в notes.ini, при выкл. нотусне, добавить JavaMaxHeapSize=256mb
по понятным причинам (я 100Мб чанками пихаю)
разбивал код специально (на копирование в память и из неё - в файл) шобы смореть время по памяти...
не дождался - ушёл по делам :), вернулся (через 2 часа) всё уже было записано
тестил под wine 1.3.24 на убунту, нотусня 7.0.4
разумеется это не ровно 10G, а чуть меньше (9.8)
код:
Код:
	On Error Goto ErrH
Dim jSession As New JAVASESSION
Dim FileOS As JAVACLASS, FileOSObj As JavaObject
Set FileOS = jSession.GetClass("java/io/FileWriter")
Set FileOSObj= FileOS.CreateObject("(Ljava/lang/String;)V", "./testout.txt")
Dim i As Long, j As Long, gig As Long, meg As Long, meg100 As Long, c As Integer
meg=Clng(1024) * Clng(1024)
meg100=meg * Clng(100)
gig= meg * Clng(1024) '1G
Dim templ As String
Dim buff As New StringBuffer(32000)
Print {100M Buffering...}
For i=1 To meg100
buff.append({0})
Next
Print {100M To String...}
templ=buff.toString()
Print {Write File...}
For i=1 To 100
FileOSObj.write(templ)
c=c+100
Print Cstr(c) & {M}
Next
Print {Close File}
Call FileOSObj.close()
Quit:
Exit Sub
ErrH:
RaiseError
Resume Quit
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
53
ниже работающий вариант, который "класть" хотел на кривые NotesStream
StringBuffer брать здесь
работает о-о-чень тоскливо (пересылки в памяти LS долгие) оптимизацией и переводом на java не занимался
Дело в том, что его не надо "переводить под Java", т.к. он изначально был написан на ней, а уж потом переложен на LS :rolleyes:
Если в поисковике набрать "stringbuffer java", то офигевам от количества ссылок :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!