Есть функция в которой в довольно долгом цилке делается
s= s & ...
тоесть строка постоянно увеличиваеться.
как можно оптимизировать в данном случае работу со строками?
хотелось бы наверное что то типа вначале выделить память довольно большого куска, а затем туда писать....
Tom>Есть функция в которой в довольно долгом цилке делается s= s & ... тоесть строка постоянно увеличиваеться.
Tom>как можно оптимизировать в данном случае работу со строками?
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, Tom, Вы писали:
Vi2>
Tom>>Есть функция в которой в довольно долгом цилке делается s= s & ... тоесть строка постоянно увеличиваеться.
Tom>>как можно оптимизировать в данном случае работу со строками?
Vi2>Пиши в файл, потом оттуда читай.
вполне возможно, тем более если сделать файл в памяти....
... << RSDN@Home 1.1 beta 1 >>
Народная мудрось
всем все никому ничего(с).
Re: Оптимизация работы со строками
От:
Аноним
Дата:
15.07.03 21:47
Оценка:
Здравствуйте, Tom, Вы писали:
Tom>Есть функция в которой в довольно долгом цилке делается Tom>s= s & ... Tom>тоесть строка постоянно увеличиваеться. Tom>как можно оптимизировать в данном случае работу со строками?
Tom>хотелось бы наверное что то типа вначале выделить память довольно большого куска, а затем туда писать....
Здравствуйте, Tom, Вы писали:
Tom>Есть функция в которой в довольно долгом цилке делается Tom>s= s & ... Tom>тоесть строка постоянно увеличиваеться. Tom>как можно оптимизировать в данном случае работу со строками?
Tom>хотелось бы наверное что то типа вначале выделить память довольно большого куска, а затем туда писать....
Если кол-во конкатенаций детерминировано то выделяешь массив строк, заполняешь его данными и при выходе из цикла
делаешь strResult=Join(MyArrarray,"")
Для более общего случая используй примерно такой класс (набираю навскидку):
StringBilder.cs
Option Explicit
private const SIZE=64 ' Этой константой можно поиграть ;)private m_aData(0) as String
private m_nPos as long
private sub Class_Initialize
dim i as long
Redim m_aData (SIZE-1)
for i=0 to SIZE-1
m_aData(i)=vbNullString
next
m_nPos = 0
end sub
public sub Append( s as string)
dim i as long
if m_nPos >= SIZE then
m_aData(0)=ToString()
for i=1 to SIZE-1
m_aData(i)=vbNullString
next
m_nPos = 1
end if
end sub
public function ToString() as string
ToString = Join(m_aData,vbNullString)
end function
Здравствуйте, Tom, Вы писали:
Tom>Есть функция в которой в довольно долгом цилке делается Tom>s= s & ... Tom>тоесть строка постоянно увеличиваеться. Tom>как можно оптимизировать в данном случае работу со строками?
Tom>хотелось бы наверное что то типа вначале выделить память довольно большого куска, а затем туда писать....
Когда конкотинируешь строки лучше пользоваться +, а не &
& — делает кастинг, а это время.
s = s + ..
Здравствуйте, MarinaK, Вы писали:
MK>Здравствуйте, Tom, Вы писали:
Tom>>Есть функция в которой в довольно долгом цилке делается Tom>>s= s & ... Tom>>тоесть строка постоянно увеличиваеться. Tom>>как можно оптимизировать в данном случае работу со строками?
Tom>>хотелось бы наверное что то типа вначале выделить память довольно большого куска, а затем туда писать....
MK>Когда конкотинируешь строки лучше пользоваться +, а не & MK>& — делает кастинг, а это время. MK>s = s + ..
Это копейки, намного страшнее перевыделение памяти в цикле
Здравствуйте, Tom, Вы писали:
Tom>Есть функция в которой в довольно долгом цилке делается Tom>s= s & ... Tom>тоесть строка постоянно увеличиваеться. Tom>как можно оптимизировать в данном случае работу со строками?
Tom>хотелось бы наверное что то типа вначале выделить память довольно большого куска, а затем туда писать....
Очень сильно помогает функция Join, если в цикле нужно "склеить" много строк, то лучше эту работу поручить Join, предварительно заполнив массив строками