Проблема при работе с большими файлами (~ 5 Гб)

Russian main discussion
  • Author
  • Message
Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Но багом точно является тот факт, что АкелПад, не сумев открыть большой файл, ничем мне как пользователю не сообщил.
Версия какая? Версия 4.5.1 (от 2 декабря) начала отображать кучу сообщений об ошибках.

Offline
Posts: 15
Joined: Wed Dec 08, 2010 9:47 am

Post by Goodvin »

FeyFre wrote:
Но багом точно является тот факт, что АкелПад, не сумев открыть большой файл, ничем мне как пользователю не сообщил.
Версия какая? Версия 4.5.1 (от 2 декабря) начала отображать кучу сообщений об ошибках.
Именно 4.5.1

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

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

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre wrote:Ответ от меня или Инструктора: "в таком-то исходном файле, в такой-то строчке, с такой-то переменной, либо функцией делают так-то, что как оказалось неправильно" Вам что-нибудь даст? Да, это плохо что не говорит. Но нужны ли Вам аж такие детали, что Вы так настаиваете?
А Вы уже являетесь полноправным вторым разработчиком AkelPad'а?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh, нет, я являюсь человеком, который не хуже Инструктора знает WINAPI и достаточное время роется в кишках АкелПада, и может сделать элементарный анализ кода и найти ошибку. Этого достаточно что-бы иметь право выразить тут своё ИМХО в виде "в таком-то исходном файле, в такой-то строчке, с такой-то переменной, либо функцией делают так-то, что как оказалось неправильно". Для этого мне не нужно быть "полноправным вторым разработчиком AkelPad'а" не правда ли? Или может быть Вы против что-бы кто-то кроме Инструктора периодически ковырялся в Акеле, напарываясь на ошибки, которые Инструктор не поймал бы ещё очень долго, ибо что называется "код приелся"? У меня нету сомнений, что пока DV писал свои плагины, то наверное с десяток раз напарывался на непонятки, которые Инструктор потом исправлял(и они значились в релизах под грифом Исправлено).

И да, хватит постоянно подозревать меня в замашках на авторство и/или мессийство АкелПад. Мне есть что делать, есть где проявлять амбиции. Даже если бы я что-то аж так хотел от АкелПад-а и такое что не согласился бы делать Инструктор или это замечательное сообщество(или добавить сделанное мной), то я бы молча сделал бы это для себя(хватает знаний, и лицензия позволяет) и никто бы это не знал.
Если Вы не заметили, я написал ИЛИ, причем в вопросительном предложении. Что Вам там не понравилось?
Что я спросил у человека какой вид ответа его устроит? - Если человек посчитает это вопрос не корректным, он как-то сам об этом скажет(в крайнем случае попросит Инструктора пнуть меня административно)
Или то что я там написал "от меня или Инструктора" вместо "от Инструктора или кого-нибудь другого"? - Ну дык Инструктор там полноправно, а обнадеживать человека что кто-то ещё может(а не обязан) ответить на его вопрос я не имею права, могу только расписываться за себя.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre
Никто не умаляет Ваших заслуг, и люди благодарны Вам за хорошие плаги.
Но Ваше поведение бывает иногда, мягко говоря, странным...
FeyFre wrote:Ответ от меня или Инструктора
1. А другие не могут разбираться в коде и комментировать его, только Вы или Instructor?
2. Почему "или Инструктора"? Он уполномочил Вас отвечать за него?
Если Вы не являетесь одним из авторов, то это намёк на какие-то близкие отношения? Но зачем тогда об этом знать всем?
Или просто патологическая потребность отметиться в каждой теме?

Goodvin конкретно предложил (суть): "по возможности доработать прогу; при невозможности: поставить сообщение о том, что файл загружен или, что корректнее, - будет загружен, не полностью, и есть опасность его повредить при сохранении", всё это естественно для любой нормальной проги, Вы же начинаете развозить здесь блевотину:
FeyFre wrote:Ответ от меня или Инструктора: "в таком-то исходном файле, в такой-то строчке, с такой-то переменной, либо функцией делают так-то, что как оказалось неправильно" Вам что-нибудь даст? Да, это плохо что не говорит. Но нужны ли Вам аж такие детали, что Вы так настаиваете?
К чему это всё?

Мы общаемся здесь достаточно давно, и мне уже не странно, что Вы не понимаете элементарной вещи, что 'каждый отвечает за себя', о которой говорят в детстве родители, которую в прямом смысле вбивают в армии.. И то, что с таким "стилем" общения Вам когда-нибудь отобьют голову на улице, - это Ваше личное дело..
Но здесь, на форуме, это напоминает героя мульта, который кричал "А мы уйдём на Север!" Это уже даже не смешно...

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

1. А другие не могут разбираться в коде и комментировать его, только Вы или Instructor?
О познаниях остальных пользователей в всех кишках я судить не могу, зато логично предполагаю что Инструктор точно знает все кишки АкелПад-а, и себя туда вставил по причине того, что я знаю что я в случае крайней необходимости и хватки смогу добраться до сути. За остальных пользователей такое предполагать не имею права. И это не исключает возможность что есть ещё кто-то, кто может так ответить.
2. Почему "или Инструктора"? Он уполномочил Вас отвечать за него?
А где я ответил за Инструктора? Я спросил о пользе заданной формы ответа, который могут пользователи, и привел список пользователей, которые его могут дать по моим субъективным оценкам вероятнее всего. Я спросил это потому-что в первую очередь мне нужен ответ на этот вопрос. Именно для этого вопросы и задают. Если Вам этот вопрос не понравился, или зацепил какие-то личные струны души - это не моя вина, но вопрос мне нужен был именно в такой форме. Ответ я выслушаю, поставлю птичку, сделаю выводы, какие выводы и относительно чего сделаете Вы, Инструктор, Вася Пупкин - дело совершенно третье, и для него обсуждения в случае необходимости я выделю ресурсы.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre wrote:За остальных пользователей такое предполагать не имею права. И это не исключает возможность что есть ещё кто-то, кто может так ответить.
Исключает.
"от меня или Инструктора" это тоже самое, что "'от меня' OR 'Инструктора'".
C точки зрения логики правильнее было бы "От пользователей, которые разбираются в коде...".
С точки зрения того, что эти пользователи не делегировали Вам свои права отвечать или что-то предполагать за них, то правильно "Ответ от меня: ".
Но так, как человек задавал вопрос не просто пообщаться с хорошими и приятными людьми, а с реальной проблемой, т.е. он обращался к разработчикам, а значит Вам неправильно за-давать такие вопросо-ответы.
FeyFre wrote:Я спросил это потому-что в первую очередь мне нужен ответ на этот вопрос. ...
но вопрос мне нужен был именно в такой форме. Ответ я выслушаю, поставлю птичку, сделаю выводы, ...
Во первых, Ваш вопрос не предполагает какого-то конкретного ответа (конкретно всё было описано выше). И ответ, какой бы он ни был, ничего не меняет.
Во вторых, 'этот вопрос нужен был именно Вам', 'где-то поставленная Вами птичка' и 'Ваши выводы' каким-то образом повлияют на то, чтобы Akel читал файлы 5 и более Гб? По всем страницам темы этого не скажешь.

По поводу варнинга. Прога либо либо должна выполнить команду, либо выдать сообщение о невозможности этого. Чего юлить? Это баг либо недоработка.
С выводом месседжа Instructor, IMHO, уж как-нибудь справится самостоятельно, без ответа на Ваш вопрос и без Ваших "птичек", иначе напишет об этом.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Ребята, мир! :) Загвоздка в одной-единственной не очень удачной формулировке.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Во первых, Ваш вопрос не предполагает какого-то конкретного ответа (конкретно всё было описано выше). И ответ, какой бы он ни был, ничего не меняет.
Предполагает. Как минимум два: "ДА", "НЕТ", остальные так или иначе производные от них.
Во вторых, 'этот вопрос нужен был именно Вам', 'где-то поставленная Вами птичка' и 'Ваши выводы' каким-то образом повлияют на то, чтобы Akel читал файлы 5 и более Гб? По всем страницам темы этого не скажешь.
А Ваше замечание повлияет? Хотя бы на что-то: на 2ГБ-шный лимит текста, на частоту моих, так называемых, замашек на "А Вы уже являетесь полноправным вторым разработчиком AkelPad'а?" ?
Fr0sT wrote:Ребята, мир! :) Загвоздка в одной-единственной не очень удачной формулировке.
Которые, судя по высказыванию товарища VladSh, я делаю в каждом втором сообщении :)

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Мне кажется, надо закончить все эти неконструктивные перепалки на том, что было бы неплохо, если бы AkelPad научился хотя бы предупреждать при открытии больших файлов, а лучше – умел нарезать их на части и работать с частями.
Ведь неплохо же, да?
А дальше остается только сочетание затрат на реализацию с получаемой пользой со стороны тех, кто может это сделать. Далее остается или расписывать пользу, или помогать реализовывать, или спонсировать материально. :D

P.S. А что подумал Кролик, никто не узнал, потому что он был очень воспитанным. ©
Нет, правда, пора уже или помолчать, или тему сменить.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

а лучше – умел нарезать их на части и работать с частями.
Ну это точно не реально, ибо найдется какой нибудь скрипт напишет AkelPad.GetTextRange(0,-1) и все части придется поднять в память, и сразу же клонировать их.
затрат на реализацию
Эти затраты можно будет охарактеризовать одним словом - Геморрой. WIN16 -> WIN32 тоже геморроем было, слава богу он нас мало коснулся. :lol:

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

FeyFre wrote:Ну это точно не реально, ибо найдется какой нибудь скрипт напишет AkelPad.GetTextRange(0,-1) и все части придется поднять в память, и сразу же клонировать их.
Я думаю, можно по такому случаю обойтись без скриптов и вывалить ошибку про недостаточно памяти или что-нибудь в этом духе. Все равно на работу интерпретатора скриптов с памятью мы не повлияем. (Пока не напишем свой. :D)

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Размышлизмы.
История такова, что после горячих обсуждений в данной ветке на свет появилась тестовая x64 версия AkelPad.
Начну с тезиса о том, что перенос кода x32 на x64 это сложная работа, цель которой не вполне ясна.
Перенос кода на 64-битную платформу и сам-то не прост. Часть 32-битного кода оказывается, как правило, либо неработоспособной, либо, что еще хуже, работающей "неправильно".
Простейший пример - использование в 32-битном коде "волшебных констант" (типа 0xffffffff, 0x7fffffff, 0x80000000 в качестве максимальных/минимальных значений переменных либо битовых масок). Такой код может успешно компилироваться и на 64-битной платформе, но работать там неправильно. Или непосредственное использование типа DWORD, столь естественное для x32 кода, может привести (при операциях с указателями гарантированно приведёт) к очень противным багам в 64-битной версии, поскольку там адреса могут иметь больший чем DWORD размер. Вообще же количество только типичных проблем не ограничивается этими двумя, и может исчисляться десятками. Но поскольку сам я знаю о переносе кода x32 на x64 только понаслышке, то примеры - это иллюстрация тезиса для тех, кто возможно знает об этом ещё меньше.
Итак, предполагаемая цель переноса на x64 - заставить AkelPad обрабатывать "сверхбольшие" файлы.
Но замена платформы на x64 этой проблемы, как мне кажется, не решит. AkelPad пока устроен так, что теоретически может обрабатывать файлы не более половины размера установленной оперативной памяти (из расчета - 2 байта на символ). Здесь должен оговориться, что поставленный мной опыт был не вполне корректен, т.к. есть подозрения на некорректную работу с железом подсистемы памяти (используются 2 планки разных фирм и емкости 2Gb + 1Gb и в ряде случаев система работает "не замечая" 3-го Gb). Т.о. на моей машине AkelPad справляется с файлами порядка 500Mb, но файлы размером чуть более 1Gb (конкретно = 1,04Gb) ему уже не по зубам, и он атакует сообщениями о невозможности выделения достаточного количества памяти для окна. Подчеркну, что лимит на размер редактируемого файла определен не только теоретическим максимумом доступного адресного пространства (4GB), но еще и физическим размером оперативки. Это важно. И если напрямую перенести эту аналогию на x64, то будет очевидна очень низкая эффективность переноса текущего кода на x64. Может статься, что на x64 на машине с небольшим количеством оперативки (например, не 16Gb, как у Goodvin-а, а "всего только" 8Gb) пользователю все равно не удастся оперировать 5Gb-ным файлом.
Есть несколько вариантов.
Вариант 1 "a-la EmEditor".
EmEditor использует "memory mapped files" для загрузки больших файлов (файл загружается лишь частично). Для тех кому это интересно, но мало о чем говорит, вот ссылка (у кого тяжело с английским, смогут найти переводы на wasm.ru). После прочтения станет положительно понятно, почему подобный подход часто используется в разного рада viewer-ах, но не слишком часто в полноценных редакторах. Даже среди коммерческих редакторов "memory mapped files" используется не более чем 1/3 производителей (по мнению автора EmEditor-а). Значимый плюс - снятие ограничений на размер файла (само ограничение, конечно, никуда не девается, но лимит отодвигается уж очень далеко - в район ограничений самой файловой системы или жесткого диска) без изменения битности приложения (т.е. пользователи x32-систем получат такую возможность наравне с пользователями x64-систем). Минусы, впрочем, тоже не малые. Способ затратный. Ведь кроме переделок в самом редакторе наверное потребуется переделка и всех его плагинов. Следовательно, это будет уже "совсем другой" редактор.
Вариант 2 "продолжать в сторону x64".
Чтобы не повторять ранее сказанное, выражу своё отношение цитатой из Конька-Горбунка - "много много непокою принесёт оно с собою".
Вариант 3 "Wu Wei (недеяние)"
Да, да, именно. Оставить (пока) всё как есть и примириться с тем, что ограничения в физическом мире существуют. На AkelPad свет клином не сошелся и те ситуации, когда требуется редактирование ну ооочень больших файлов разрешать иными средствами.
Сама по себе, невозможность редактирования "сверхбольших" файлов - это ни хорошо ни плохо (особенно, когда все это "не у тебя" ;) ).
Для примера, Notepad++ с версии 5.2 и выше пошел именно таким путем. Перед открытием файла, проверяется его размер и если он больше "предельного", то Notepad++ даже не пытается его открыть, а просто сообщает, что "файл слишком велИк". Эмпирически я определил предельный размер файла около 300Mb. В wiki-справке Notepad++ причина объясняется тем, что используя компонент Scintilla и загружая весь файл целиком в память, оной памяти нужно примерно в 4 раза больше чем размер редактируемого файла, а иначе редактор падает (до версии NPP 5.2 на больших файлах).
Вариант 4 и т.д. ...

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

opk44
x64 версия дает возможность не упираться в ограничение 2Gb ОЗУ при наличии большого объема памяти. Так что как бы я не уходил от этого шага, понял, что его надо сделать.
Post Reply