07.01.2020, 15:13 | #1 |
Участник
|
mazzy: Опубликовал проект SysString
Источник: https://github.com/mazzy-ax/SysString
============== Прибрался, пооптимизировал и опубликовал предварительную версию проекта SysString Можно ли обойтись без копирования текста? TextBuffer.find или дот-нетовский RegExp? Статические методы или методы инстанса? Буду рад вашим замечаниям и предложениям. ============== Источник: https://github.com/mazzy-ax/SysString
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
07.01.2020, 16:37 | #2 |
Участник
|
Думаю, нет, так как string иммутабельный в X++ и .NET FW. Возможно, можно снизить количество копирований при помощи StringBuilder/TextBuffer
Цитата:
TextBuffer.find или дот-нетовский RegExp?
Цитата:
Статические методы или методы инстанса?
В IL вот это должно свалиться X++: TextBuffer ret = new TextBuffer(); ... // InvalidCastException так как public static SysText construct(str s = '') ret = SysText::construct(text.subStr(startPos, endPos - startPos + 1)); ... |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
07.01.2020, 16:50 | #3 |
Участник
|
Цитата:
я имею в виду строку 195-197 здесь: https://github.com/mazzy-ax/SysStrin...ss_SysText.xpp Цитата:
я делал и так, и эдак. решил оставить find. но вдруг чего пропустил или не учел. Цитата:
Цитата:
Но согласен - не красиво. Исправлю. И записал себе в чеклист - запускать тесты и на сервере со включенным CIL |
|
|
За это сообщение автора поблагодарили: belugin (10). |
07.01.2020, 17:04 | #4 |
Участник
|
Я бы сначала отпрофилировал, потом бы начал оптимизировать. Возможно, на типичной нагрузке для этого метода еще одно копирование пофиг.
Цитата:
угу.
SysText - наследник. Не должно. |
|
07.01.2020, 17:43 | #5 |
Участник
|
поправил, опубликовал https://github.com/mazzy-ax/SysStrin...435f4504628ad9
спасибо. Цитата:
копирование здесь единственное. тут такое соображение: 1. в аргументе текст из textBuffer 2. если textBuffer приходит одним сегментом, то пофиг. Беспокоит только память на промежуточный буфер. 3. если же textBuffer долго и упорно собирали из кусков кода, то в строке 195 будет достаточно долго собираться один сегмент в промежуточном буфере. И память опять же. Другими словами, проблема не столько в копировании. Сколько в том, что в этом месте textBuffer должен будет объединить ВСЕ сегменты текста. хотя теоретически этого можно и не делать, если б метод changeIdent умел работать с позицями начала и конца. Но с позициями он у меня получается слишком сложным и неустойчивым. Вот-вот. В этом и вопрос. Я решил, что статические. Но... Последний раз редактировалось mazzy; 07.01.2020 в 17:57. |
|
07.01.2020, 23:40 | #6 |
Участник
|
Надо убрать наследование - тогда эти статические методы будут работать в любым TextBuffer - его не надо будет переделывать в SysText для использования с этими методами. Я вижу что он не содержит состояния. И особого смысла в новом типе инстансов нет В Dyn365FO можно сделать extension methods если нужен более короткий синтаксис вызова. Я бы сделал название производным от TextBuffer (TextBuffer[Identation]Utils, TextBufferExtensions) чтобы его можно было легко найти.
|
|
08.01.2020, 00:22 | #7 |
Участник
|
Цитата:
Цитата:
в опубликованной версии - согласен. на будущее - надо подумать. Цитата:
Прежде всего, чтобы в МС могли сделать свою версию, если такое желание возникнет. Ну и чтобы не пересекаться в пространстве имен. А вот для классических версий уже можно выбирать любое название, которого нет в AOT Цитата:
И точно не Util. Надо подумать. |
|