10.03.2009, 09:14 | #1 |
MCTS
|
Особенности поведения str
Обнаружил интересные вещи. В AX4, как оказалось, размер str ограничен загадочным образом:
X++: int i,j; str s; str s2; SysOperationProgress p = new SysOperationProgress(); ; try { while (i <= 140000000) { i += 1000; j =strlen(s); s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s += "абвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзийабвгдежзий"; s2 = s; p.setText(strfmt("%1", strlen(s))); } } catch { info(strfmt("last %1", j)); } Момент этот зависит от количества знаков в строке. То есть при превышении некоторого количества знаков в строке, с ней невозможно производить никаких операций. Допустимое количество знаков зависит, вероятно, от количества свободной памяти в системе. У меня падает обычно примерно на 4000000 символов. Однажды упало где-то на 2000000. Опять же, значение не фиксировано, может меняться, но колеблется в этом районе. Для себя я решил, что надежное значение - 1000000 символов. Дальше, нельзя выставить размер строки больше 1000 символов: X++: str 2000 s; В AX3 дела обстоят уже лучше. Размер строки не ограничивается. Во всяком случае, я не дождался окончания работы вышеуказанного джоба. Но также нельзя объявлять строки больше 1000 символов - режутся как и в 4-ке. Кроме того, при передачи строк большого размера от сервера к клиенту, тот принудительно обрывает связь. Еще одна особенность - по мере роста строки затрачивается все больше времени на его модификацию. Непонятно почему, strlen занимает много времени. Вот такие дела... Из-за ограничения размера str, кстати, падают некоторые ресурсоемкие операции. |
|