Для тех, кто подходит к этой теме поздно, я мог видеть, что hitscan в «вы, вероятно, не должны делать это» может заставить кого-то спросить, что они должны делать ...
THe StringBuilder класс часто легкая замена. Рассмотрите один из stream-based classes, особенно если ваши данные поступают из файла.
Проблема с s = s + "stuff" заключается в том, что она должна выделить совершенно новую область для хранения данных, а затем скопировать все старые данные в нее плюс новый материал - КАЖДОЙ И КАЖДОЙ ОБРАБОТКИ LOOP. Таким образом, добавление 5 байтов в 1 миллион с s = s + «материал» чрезвычайно дорого. Если вы хотите просто написать 5 байт до конца и продолжить свою программу, вам нужно выбрать класс, который оставляет место для роста.
StringBuilder sb = new StringBuilder(5000);
for (; ;)
{
sb.Append("stuff");
}
StringBuilder будет auto-grow by doubling когда это предел хит. Таким образом, вы увидите рост боли один раз в начале, один раз на 5000 байт, снова на 10000, снова на 20000. При добавлении строк будет страдать всякая итерация цикла.
+1 Хороший вывод – 2011-03-11 11:10:51
@ m.edmondson: На самом деле я не уверен. [Array] (https://msdn.microsoft.com/en-us/library/system.array%28v=vs.110%29.aspx) для экземпляров имеет также «LongLength», а поток использует `long `как длину. Хотя это правильный ответ, это точный способ измерения этого. – 2015-01-27 19:59:05
Но первые два бита используются для показа ASCII/не-ASCII как [эта статья] (https://www.codeproject.com/Articles/3377/Strings-UNDOCUMENTED), поэтому он должен быть 2^30 = 1 073 741 824 – Saito 2017-02-10 12:04:53