Страница 3 из 3
XML C8 - не понял...
Добавлено: 30 Май 2015, 23:42
Aragorn
Так что же... классу Cstr таки до конца доверять нельзя? И можно ли конструкторы-деструкторы заменть так, как я описал выше?
Насчет 40 кб... ошибся буквой. вместо к читаем м. При формировании ДОМ документа и формировании очереди выделяется эдак около 250 мб, а после уничтожения ДОМ документа около 40 остается. Free(ListXML) эффекта не дает, пробовал сразу, как только обнаружил.
Кстати, такой обьем памяти для парсера ХМЛ я так понимаю, обычное дело. В Дельфи пользовали встроенный ХМЛДокумент для формирования файла, так тоже жрал примерно столько же. Но без утечек. Переделали на классы и stream'ы - выделение памяти сократилось раз в пять. Ну тут понятно - под конкретную структуру документа проще так сделать, а компонент видимо в порядке универсальности создает кучу ненужных для конкретной задачи вещей...
И все-таки, если есть возможность, прошу подбросить еще идеек!!!
XML C8 - не понял...
Добавлено: 01 Июнь 2015, 10:33
Aragorn
Неужели ни у кого нет идей? Или советов? Может, можно перегонять utf-8 в windows-1251 и наоборот каким-то другим способом?.. неужели ни у кого не возникало такой задачи, кроме Yufil?..
XML C8 - не понял...
Добавлено: 01 Июнь 2015, 11:04
Yufil
Ну так посмотри cstr.clw, он краток и прост. Методы toUTF8 и ToAscii - там максимум десяток строк кода, где-то Dispose мог и пропустить.
Да и оформить конвертацию в виде отдельной процедуры ненапряжно, там три обращения к WinAPI - и всё.
Но у меня больше подозрений на CW8, я пытался перегнать одно приложение с CW6 и не достиг успеха, просто не компилируется. Может быть, более поздний релиз поможет. Судя по тому, что ссылка на &Cstr считается ошибкой - странно это...
XML C8 - не понял...
Добавлено: 01 Июнь 2015, 11:12
PavelNK
Возьми Клашин класс, сделай от него наследника. Добавь методы конвертации и вставь где необходимо
Конвертация в 1251 из utf-8
Blength = MultiByteToWideChar (CP_UTF8, 0, address(S), -1, address(Buffer2), 0)
RetCode = MultiByteToWideChar (CP_UTF8, 0, address(S), -1, address(Buffer2), Blength)
RetCode = WideCharToMultiByte (CP_ACP0, 0, address(Buffer2),Blength, address(Buffer1), Slength, 0, 0)
Конвертация в utf-8 из 1251
RetCode = MultiByteToWideChar (CP_ACP0, 0, address(S), -1, address(Buffer2), Blength)
RetCode = WideCharToMultiByte (CP_UTF8, 0, address(Buffer2), Slength, address(Buffer1), Blength, 0, 0)
XML C8 - не понял...
Добавлено: 01 Июнь 2015, 19:49
Aragorn
PavelNK, завтра попробую. Однако, чем меня зацепил класс CStr так это быстрой работой с текстовыми файлами и неким подобием TStringStream... те быстрой работой с текстом.
Юрий, к содержимому CStr.clw вопросов практически нет (если не считать неадекватные падения приложения при наличии в классе явных конструкторов и деструкторов и/или прямого обьявления экземпляра класса. Не пойму, в чем дело, может быть в новой thread-модели, организованной в 8рке?), в классе утечек нет. Утечка явно в работе ХМЛ модуля, а именно после работы с очередью типа DOMQueue...
XML C8 - не понял...
Добавлено: 01 Июнь 2015, 21:29
Дед Пахом
скорее всего мешанина имён: у SV тоже есть класс CStr (svcom.inc)
XML C8 - не понял...
Добавлено: 02 Июнь 2015, 0:37
Aragorn
Ну так я svcom.inc не подключал... Разве что где шаблоном подцепился? Но попробую переименовать, посмотрим, что получится...
XML C8 - не понял...
Добавлено: 02 Июнь 2015, 0:51
Дед Пахом
Уж больно поведение (падение на стадии инициализации объекта) похоже на то, если используешь COM класс, но прагмы _SVLinkMode_ и _SVDllMode_ не определены.
XML C8 - не понял...
Добавлено: 02 Июнь 2015, 19:27
Aragorn
В общем, как и предположил Дед, все дело оказалось в "волшебных пузырьках" ))) А точнее - в конфликте имен.
Переименовал все, что связано с CStr в FaStr - и проблема с классом исчезла:
- заработало нормальное обьявление экземпляра класса FS FaStr;
- возвращены конструктор и деструктор:
- все команды в конструкторе и деструкторе выполняются;
- класс полностью стал вести себя адекватно и выполнять свои функции.
Остался вопрос по выделению памяти в DOMQueue, ну да хрен с ним пока )))
XML C8 - не понял...
Добавлено: 05 Июнь 2015, 22:19
Aragorn
Решил для своей задачи проблему с утечкой памяти - исключил из работы очередь DOMQueue, зная конечное число уровней вложенности элементов, получаю очередной список нодов и извлекаю его атрибуты и/или значения, в конце применяю метод Release() для всех NamedNodeMap, NodeList и самого DomDocument. Утечки нет. Тема исчерпана...?