Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
#16: 2015-01-12 22:58:04 ЛС | профиль | цитата
Assasin, А где работа с большими файлами
карма: 22

0
Ответов: 824
Рейтинг: 138
#17: 2015-01-13 00:28:22 ЛС | профиль | цитата
Не, не! SharedStream забирать "низя"
nesco писал(а):
Assasin, А где работа с большими файлами?
Это просто, я один такой "тупой" и "ленивый", что не разобрался в нем!
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#18: 2015-01-13 00:30:12 ЛС | профиль | цитата
nesco писал(а):
Assasin, А где работа с большими файлами

А этим кто-то пользуется? Впрочем да, этого я вообще не учел. Я хотел составить простую в понимании модель IPC для хиасмера, а для работы с большими файлами можно оставить оригинальный SharedStream, только назвав его как-нибудь иначе. Типа VirtualStream.
карма: 10
0
Ответов: 824
Рейтинг: 138
#19: 2015-01-13 00:58:23 ЛС | профиль | цитата
Кхм... Прошу прощения
Assasin писал(а):
назвав его как-нибудь иначе. Типа VirtualStream.
И "типа" все сразу поймут как им пользоваться?
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#20: 2015-01-13 01:30:09 ЛС | профиль | цитата
sashaoli писал(а):
И "типа" все сразу поймут как им пользоваться?

Нет, я лишь предположил, как можно решить проблему открытия больших файлов, при этом реализовав и упрощенную модель IPC для хиасма.
карма: 10
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#21: 2015-01-13 02:01:22 ЛС | профиль | цитата
Assasin писал(а):
Типа VirtualStream

Тогда уж лучше FileMapping (и че я его так сразу не назвал ???)
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#22: 2015-01-13 02:31:41 ЛС | профиль | цитата
[offtop]
nesco писал(а):
Тогда уж лучше FileMapping (и че я его так сразу не назвал ???)

Хорошая мысля приходит опосля [/offtop]
Кстати, если развивать предложенную мною модель IPC, можно туда же еще добавить простейший интерфейс функций (на основе компонента Event): добавляем компонент IPC_Event со свойством "имя события" и единственной точкой: onEvent (событие происходит, когда другой процесс его вызовет). И еще один компонент: IPC_CallEvent с аналогичным свойством и точкой (только слева - чтобы вызывать событие).
Кстати, вот и перфикс готов для новой группы компонентов: IPC_XXX.
карма: 10
0
Ответов: 8928
Рейтинг: 823
#23: 2015-01-13 08:29:51 ЛС | профиль | цитата
И этот форум окончательно попадёт в чёрный список распространителей вирусов.
карма: 19

0
Ответов: 9906
Рейтинг: 351
#24: 2015-01-13 08:58:17 ЛС | профиль | цитата
Assasin, кончай фигней страдать.

Тебе предложили ОДИН элемент, про функционирование которого и написать то больше нечего, кроме того, что я уже написал.
Ты же говоришь, что слово "окно" недоступно для твоего понимания, и предлагаешь "продвинутую технологию" в которой уже не меньше двух элементов.
И которая обладает своими ограничениями.

Кстати, сколько типов "переменных" ты предлагаешь ???
На каждый тип своего клиента делать ???
А если размер типа заранее неизвестен (типа dtAnsiString) ???
И наконец, кто сказал, что файл состоит из каких-то "переменных", прости господи...

И вот именно это ты считаешь более простым, чем "когда уже все есть" (в DataToFile[Ex]).
Так что ли

карма: 9

0
Ответов: 4631
Рейтинг: 749
#25: 2015-01-13 11:44:27 ЛС | профиль | цитата
nesco писал(а):
А где работа с большими файлами?
Вообще с "большими файлами" проблема только на уровне реализации в HiAsm: на уровне ОС нет никакой необходимости использовать отображение файла в память, чтобы работать с ними. Речь вообще идёт только об размерности свойств Position и Size.

В HiAsm вижу такие варианты:
- в данный момент свойства Position и Size позволяют работать с файлами до 4 Гб. Теоретически. На практике в наших компонентах не удастся установить позицию методами doPosition дальше 2 Гб: на самом деле позиция задается в виде смещения от начала файла, а смещение может быть и отрицательным, поэтому доступен только положительный диапазон Integer. Решается небольшой доработкой этих методов: для позиции больше 2 Гб позиция устанавливается в 2 захода методом TStream.Seek: на 2 Гб от spBegin, затем на остальное от spCurrent. Другой нюанс: нужно добавить работу с беззнаковым целым в Math (а может и не надо) и парочку методов в Converter (UIntToStr, StrToUInt).
И тем не менее, даже в нашем случае МОЖНО читать и писать данные в файлы больше 4 Гб: при чтении и записи система сама увеличивает позицию, не будет работать только Position и Size. Опять же, если добавить метод doSkip (на основе TStream.Seek(spCurrent)), можно будет смещать позицию в несколько заходов на любую глубину файла.

- написать аналог FileStream для больших файлов, а для свойств Position и Size использовать поле TData.rdata. Единственная проблема - возможная потеря точности при математических вычислениях с этими числами. Вероятно, можно доработать Math для целочисленных операций с типом double (ака Real)

- увеличить поле TData.idata до Int64, написать аналог KOL-овского FileStream, оперирующего Int64 (в новой KOL уже реализован). Правда, тогда нужно будет доделывать и остальные компоненты, типа Math, для поддержки операций с 64-битными целыми. Это немного трудоёмко, но реализуемо.

карма: 26

0
Ответов: 9906
Рейтинг: 351
#26: 2015-01-13 11:59:14 ЛС | профиль | цитата
Netspirit, а скажи мне как гинеколог гинекологу: ты коды SharedStream смотрел
карма: 9

0
Ответов: 4631
Рейтинг: 749
#27: 2015-01-13 12:00:28 ЛС | профиль | цитата
Нет, не смотрел. А что?
карма: 26

0
Ответов: 9906
Рейтинг: 351
#28: 2015-01-13 12:50:34 ЛС | профиль | цитата
Там нет проблемы с терабайтными файлами.

Окно - да, 2Гига максимум. И мы пользуемся (в смысле - можем пользоваться) нашим любимым стримом для чтения/записи/добавления. В "окно".
А Offset имеет 56 бит мантисы. Это 32 квадробайта.
------------ Дoбавленo в 12.50:
Т.е., все уже есть, по большому счету-то.
Надо не добавлять, а просто выкинуть лишние (субъективные) заморочки.
И все.
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#29: 2015-01-13 13:09:50 ЛС | профиль | цитата
Galkov писал(а):
Надо не добавлять, а просто выкинуть лишние (субъективные) заморочки

А вот количество выделяемых страниц памяти я не стал бы убирать, от этого очень сильно зависит быстродействие всего процесса
карма: 22

0
Ответов: 4631
Рейтинг: 749
#30: 2015-01-13 13:22:36 ЛС | профиль | цитата
Galkov писал(а):
А Offset имеет 56 бит мантисы
То-есть, по факту
Netspirit писал(а):
для свойств Position и Size использовать поле TData.rdata
Что и предлагаю сделать для обычных стримов и не париться по поводу размера файла.

Как я понял, в системе суть SharedStream - не работа с большими файлами, а некоторый BufferedFileStream. При необходимости BufferedFileStream можно и у нас реализовать аналогично FileStream.
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)