Qual é a string mais longa que pode ser criada no .NET? Os documentos da String
turma são silenciosos quanto a essa questão, pelo que pude ver, portanto, uma resposta autorizada pode exigir algum conhecimento de componentes internos. A alteração máxima seria em um sistema de 64 bits?
[Isso é solicitado mais por curiosidade do que por uso prático - não pretendo criar nenhum código que use sequências gigantescas!]
byte[]
.Com base em meu experimento altamente científico e preciso, ele atinge a minha máquina bem antes de 1.000.000.000 de caracteres. (Ainda estou executando o código abaixo para obter uma identificação melhor).
ATUALIZAÇÃO: Depois de algumas horas, eu desisti. Resultados finais: pode ser muito maior que 100.000.000 caracteres, dados instantaneamente
System.OutOfMemoryException
a 1.000.000.000 caracteres.fonte
Como a
Length
propriedade deSystem.String
é umInt32
, eu acho que o comprimento máximo seria 2.147.483.647 caracteres (Int32
tamanho máximo ). Se demorasse mais, não seria possível verificar o comprimento, pois isso falharia.fonte
LongLength
e um fluxo usalong
como comprimento. Embora seja uma resposta válida, é uma maneira precisa de medir isso.Para quem chega atrasado a esse tópico, pude ver que o "você provavelmente não deveria fazer isso" do hitscan pode fazer com que alguém pergunte o que deve fazer ...
A classe StringBuilder geralmente é uma substituição fácil. Considere uma das classes baseadas em fluxo , principalmente, se seus dados vierem de um arquivo.
O problema
s += "stuff"
é que ele precisa alocar uma área completamente nova para armazenar os dados e, em seguida, copiar todos os dados antigos para ele, além dos novos itens - CADA E CADA ITERAÇÃO DE LOOP. Portanto, adicionar cinco bytes a 1.000.000s += "stuff"
é extremamente caro. Se o que você deseja é escrever apenas cinco bytes até o final e prosseguir com o programa, escolha uma classe que deixe espaço para crescimento:StringBuilder
será auto-grow dobrando quando é limite é atingido. Então, você verá a dor do crescimento uma vez no início, uma vez em 5.000 bytes, novamente em 10.000, novamente em 20.000. Seqüências anexadas incorrerão na dor a cada iteração de loop.fonte
O comprimento máximo de uma string na minha máquina é 1.073.741.791 .
Veja bem, Strings não são limitadas por números inteiros, como geralmente se acredita.
À parte as restrições de memória, as Strings não podem ter mais de 2 30 ( 1.073.741.824 ) caracteres, pois um limite de 2 GB é imposto pelo Microsoft CLR (Common Language Runtime). 33 a mais do que o meu computador permitiu.
Agora, aqui está algo que você pode experimentar.
Crie um novo aplicativo de console C # no Visual Studio e copie / cole o método principal aqui:
Meus resultados foram os seguintes:
O comprimento máximo de uma string na minha máquina é 1073741791.
Eu apreciaria muito se as pessoas pudessem postar seus resultados como um comentário abaixo.
Será interessante saber se as pessoas obtêm resultados iguais ou diferentes.
fonte
200 megas ... nesse momento, seu aplicativo é interrompido virtualmente, possui cerca de um gig de memória de conjunto de trabalho e o sistema começa a agir como se fosse necessário reiniciar.
fonte
Como
String.Length
é um número inteiro (que é um apelido paraInt32
), seu tamanho é limitado aInt32.MaxValue
caracteres unicode. ;-)fonte