строка. Формат () параметры

Вы можете использовать \< и \> в регулярном выражении для соответствия в начале / конце слова.

grep ("\\<TH\\>", t1) и т. д.

15
задан Blatfrig 18 February 2009 в 13:19
поделиться

4 ответа

Хорошо, я появляюсь из сокрытия... Я использовал следующую программу для проверки то, что продолжалось и в то время как Marc указал что строка как этот "{0} {1} {2}... {2147483647}" следовал бы за пределом памяти 2 гибибайт, прежде чем список аргументов, мои результаты не соответствовали Вашим. Таким образом жесткий предел, количества параметров можно вставить строку. Вызов способа форматирования должен быть 107713904 .

int i = 0;
long sum = 0;
while (sum < int.MaxValue)
{
    var s = sizeof(char) * ("{" + i + "}").Length;
    sum += s; // pseudo append
    ++i;
}
Console.WriteLine(i);
Console.ReadLine();

Любовь люди обсуждения!

19
ответ дан 1 December 2019 в 00:37
поделиться

Подробно останавливаясь на подробном ответе Marc.

Единственное другое ограничение, которое важно, для отладчика. После того как Вы передаете определенное число параметров непосредственно к функции, отладчик становится менее функциональным в том методе. Я полагаю, что предел является 64 параметрами.

Примечание: Это не означает массива с 64 участниками, но 64 параметра передали непосредственно функции.

Вы могли бы смеяться и сказать, "кто сделает это?" который является, конечно, допустимым вопросом. Все же LINQ делает это намного легче, чем Вы думаете. Под капотом в LINQ компилятор генерирует много кода. Возможно, что для большого генерируют SQL-запрос, где больше чем 64 поля выбраны, что Вы поразили бы эту проблему. Поскольку компилятор под капотом должен был бы передать все поля конструктору анонимного типа.

Все еще угловой случай.

4
ответ дан 1 December 2019 в 00:37
поделиться

Не насколько я знаю...

хорошо, теоретический предел был бы пределом int32 для массива, но Вы поразили предел длины строки задолго до этого, я предполагаю...

Просто не сходят с ума с ним;-p может быть лучше записать много маленьких фрагментов в (например), файл или ответ, чем один огромный хит.

редактирование - это смотрело как был предел в IL (0xf4240), но по-видимому это не вполне, как это появляется; я могу заставить его стать довольно большим (2^24), прежде чем у меня просто закончится системная память...

<час>

Обновление; мне кажется, что точка ограничения является строкой формата... они {1000001} {1000002}, складывают... быстрый бит математики (ниже), показывает, что максимум полезный количество аргументов, которые мы можем использовать, 206,449,129:

    long remaining = 2147483647;// max theoretical format arg length
    long count = 10; // i.e. {0}-{9}
    long len = 1;
    int total = 0;
    while (remaining >= 0) {
        for(int i = 0 ; i < count && remaining >= 0; i++) {
            total++;
            remaining -= len + 2; // allow for {}
        }
        count *= 10;
        len++;
    }

    Console.WriteLine(total - 1);
19
ответ дан 1 December 2019 в 00:37
поделиться

Рассмотрение, что и предел класса Массива и Строковый класс являются верхним пределом Int32 (зарегистрированный в 2,147,483,647 здесь: Структура Int32 ), разумно полагать, что это значение является пределом числовой строки параметров формата.

Обновление После проверки отражателя, John прав. Строка. Формат, с помощью Красного Отражателя Логического элемента, показывает и следующие:

public static string Format(IFormatProvider provider, string format, params object[] args)
{
    if ((format == null) || (args == null))
    {
        throw new ArgumentNullException((format == null) ? "format" : "args");
    }
    StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
    builder.AppendFormat(provider, format, args);
    return builder.ToString();
}

format.Length + (args.Length * 8) части кода достаточно для уничтожения большей части того числа. Следовательно, '2,147,483,647 = x + 8x' оставляет нас с x = 238,609,294 (теоретическими).

Это - намного меньше, чем это, конечно; поскольку парни в комментариях упомянули, что строка, поражающая длину строки, ограничивает, ранее довольно вероятно.

, Возможно, кто-то должен просто кодировать это в проблему с машиной! :P

3
ответ дан 1 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: