Я пытаюсь найти решение в Challange в codeeval.com https://www.codeeval.com/open_challenges/125/система из исключения памяти в vbnet Console Application
мой код:
Dim seq As String = "0"
Dim tmp As String
For i As Integer = 1 To 31
tmp = seq
tmp = tmp.Replace("2", "3")
tmp = tmp.Replace("1", "2")
tmp = tmp.Replace("0", "1")
tmp = tmp.Replace("3", "0")
seq &= tmp
Next
Console.WriteLine(seq)
После 20 циклов Visual Studio достигает 1,5 Гб оперативной памяти использование и не работает после 25 циклов. Можете ли вы рассказать мне, как это исправить?
Отредактировано:
Длина конечной строки должен быть 3000000000 долго. Вот почему я написал цикл. В 10 циклах длина строки составляет всего 1024. Я должен, вероятно, написать петли цикла 31, которые будут иметь длину 4294967296 (2^31).
Мой новый код:
Dim seq As StringBuilder = New StringBuilder()
Dim tmp As StringBuilder = New StringBuilder()
seq.Append("0")
For i As Integer = 1 To 30
tmp.Append(seq)
seq.Replace("2", "3")
seq.Replace("1", "2")
seq.Replace("0", "1")
seq.Replace("3", "0")
tmp.Append(seq)
seq.Clear()
seq.Append(tmp)
Next
Ваша строка удваивается каждый цикл. Таким образом, ваша строка становится очень большой. Кто вам сказал, что вы должны сделать 30 циклов ? – etalon11
Поскольку строки неизменяемы, вы создаете новый строковый объект с каждым '.Replace'. Кроме того, вы создаете новую строку при конкатенации с' & = '. Вместо этого используйте' StringBuilder'. С '.Append' вы можете добавить вас chars. У него также есть функция '.Replace'. После цикла напишите строку с помощью' stringBuilder.ToString' –