Автоматическое увеличение имени файла

У меня есть имя файла в следующем формате:

отметка времени-пользователя-1

Этот файл постоянно записывается, но до того, как он станет слишком большим, я хочу создать новый файл.

отметка времени-пользователя-2

Как я могу добиться этого с использованием наименьшего количества памяти (то есть без переменных или с небольшими переменными)

вот моя версия:

        private void Split() {
            char[] strArr = FlowArgs.Filename.ToCharArray();
            int num;
            //get the last number
            if (Int32.TryParse(strArr[strArr.Length - 1].ToString(), out num)) {
                num += 1;
            }
            //replace the old number with the new number
            char.TryParse(num.ToString(), out strArr[strArr.Length - 1]);
            FlowArgs.Filename = strArr.ToString();

        }

Редактировать: Я добавил свойство «версия» (int) в класс FlowArgs. Однако моя новая проблема заключается в том, как я могу добавить это в конец имени файла

Преждевременная оптимизация - корень всех зол

Rinat Abdullin 13.01.2009 10:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
1 501
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

«наименьшее количество памяти» НЕ равно «отсутствие или мало переменных»

Локальные переменные занимают мало памяти. Но создание объекта в куче занимает намного больше времени, и для очистки требуется сборщик мусора.

В вашем примере ваши ToCharArray () и ToString () создали 4 объекта (косвенно созданный объект не включен).

Что бы вы посоветовали тогда? FlowArgs - это класс, унаследованный от EventArgs. Думаю, я мог бы просто добавить еще одно свойство под названием «версия» и увеличить его?

masfenix 13.01.2009 09:16
Ответ принят как подходящий

Я думаю, вам следует просто сохранить счетчик в int. Я понимаю, что вы хотите сэкономить место в памяти, но, честно говоря, дополнительный int действительно находится в категории "приемлемых". Я имею в виду, что парсер Int32, вероятно, тратит намного больше памяти. Не забывайте, что на x86 пространство памяти разделено на 4096 байтовых страниц, поэтому тратится гораздо больше памяти, чем эти 4 байта.

РЕДАКТИРОВАТЬ: вы, вероятно, захотите иметь в своем классе такой метод, как GetNextFileName (), который генерирует вам следующее имя файла (возможность рефакторинга вашего кода на небольшие биты важна, гораздо важнее, чем экономия места в памяти):

private int nextFileNumber = 0;

private string GetNextFileName(string userName)
{
    return String.Format("{0}-{1}-{2}", DateTime.Now, userName,
       nextFileNumber++);
}

ваша строковая переменная уже является массивом символов:

    int num=0;
    //get the last number
    if (Int32.TryParse(FolwArgs.Filename[FolwArgs.Filename.Length-1].ToString(), out num))
        num++;
    //replace the old number with the new number
    char.TryParse(num.ToString(), out FolwArgs.Filename[FolwArgs.Filename.Length-1]]);

Вместо использования текущего счетчика рассмотрите возможность использования datetime of creation в качестве изменяющейся части вашего имени файла. Таким образом, вам не нужно сохранять и извлекать предыдущее значение. Используя метод ToBinary(), вы можете получить числовое представление времени. Конечно, можно использовать любой допустимый формат времени в имени файла - см. строки настраиваемого формата даты и времени.

Другие вопросы по теме