Apa string terpanjang yang bisa dibuat di .NET? Dokumen untuk String
kelas diam tentang pertanyaan ini sejauh yang saya bisa lihat, jadi jawaban otoritatif mungkin memerlukan pengetahuan internal. Apakah perubahan maksimum pada sistem 64-bit?
[Ini diminta lebih karena rasa ingin tahu daripada untuk penggunaan praktis - Saya tidak bermaksud membuat kode apa pun yang menggunakan string raksasa!]
byte[]
.Berdasarkan eksperimen saya yang sangat ilmiah dan akurat, ini unggul di mesin saya jauh sebelum 1.000.000.000 karakter. (Saya masih menjalankan kode di bawah ini untuk mendapatkan pinpoint yang lebih baik).
PEMBARUAN: Setelah beberapa jam, saya menyerah. Hasil akhir: Dapat jauh lebih besar dari 100.000.000 karakter, langsung diberikan
System.OutOfMemoryException
pada 1.000.000.000 karakter.sumber
Karena
Length
propertiSystem.String
adalahInt32
, saya akan menebak bahwa panjang maksimum akan menjadi 2.147.483.647 karakter (Int32
ukuran maks ). Jika dibiarkan lebih lama Anda tidak bisa memeriksa Panjang karena itu akan gagal.sumber
LongLength
kegunaan juga dan sungailong
sebagai panjang. Meskipun ini adalah jawaban yang valid, itu adalah cara yang akurat untuk mengukur ini.Bagi siapa pun yang datang ke topik ini terlambat, saya dapat melihat bahwa hitscan "Anda mungkin tidak boleh melakukan itu" mungkin menyebabkan seseorang bertanya apa yang harus mereka lakukan ...
Kelas StringBuilder seringkali merupakan pengganti yang mudah. Pertimbangkan salah satu kelas berbasis aliran khususnya, jika data Anda berasal dari file.
Masalahnya
s += "stuff"
adalah bahwa ia harus mengalokasikan area yang benar-benar baru untuk menyimpan data dan kemudian menyalin semua data lama ke dalamnya plus hal-hal baru - SETIAP DAN SETIAP LOOP ITERASI. Jadi, menambahkan lima byte ke 1.000.000 dengans += "stuff"
sangat mahal. Jika yang Anda inginkan hanyalah menulis lima byte sampai akhir dan melanjutkan dengan program Anda, Anda harus memilih kelas yang menyisakan ruang untuk pertumbuhan:StringBuilder
akan tumbuh secara otomatis dengan menggandakan ketika batasnya tercapai. Jadi, Anda akan melihat pertumbuhan sakit sekali di awal, sekali di 5.000 byte, lagi di 10.000, lagi di 20.000. Menambahkan string akan menimbulkan rasa sakit setiap iterasi loop.sumber
Panjang maksimal string di mesin saya adalah 1.073.741.791 .
Anda lihat, String tidak dibatasi oleh integer seperti yang umum diyakini.
Selain pembatasan memori, Strings tidak boleh memiliki lebih dari 2 30 ( 1.073.741.824 ) karakter, karena batas 2GB diberlakukan oleh Microsoft CLR (Common Language Runtime). 33 lebih dari yang diizinkan komputer saya.
Sekarang, inilah sesuatu yang dapat Anda coba sendiri.
Buat aplikasi konsol C # baru di Visual Studio dan kemudian salin / tempel metode utama di sini:
Hasil saya adalah sebagai berikut:
Panjang maksimal string pada mesin saya adalah 1073741791.
Saya akan sangat menghargai jika orang dapat memposting hasil mereka sebagai komentar di bawah ini.
Akan menarik untuk dipelajari jika orang mendapatkan hasil yang sama atau berbeda.
sumber
200 MB ... pada titik mana aplikasi Anda terhenti virtual, memiliki sekitar satu set memori yang bekerja, dan o / s mulai bertindak seperti Anda harus reboot.
sumber
Karena
String.Length
merupakan bilangan bulat (alias untukInt32
), ukurannya terbatas padaInt32.MaxValue
karakter unicode. ;-)sumber