В программе используется логировение и много подобного кода. Т.е. копится логовая строка а потом сохраняется в БД. Включил как то профилировщик памяти и оказалось больше всего в памяти находится объекты типа string.
Здравствуйте, Аноним, Вы писали:
А>>>В программе используется логировение и много подобного кода. H>>Использовать StringBuilder
А>В результате памяи меньше будет жрать?
да, меньше.
Re[4]: Как оптимизировать string s=""; s+="dddd";
От:
Аноним
Дата:
15.09.11 08:37
Оценка:
А>>>>В программе используется логировение и много подобного кода. H>>>Использовать StringBuilder
А>>В результате памяи меньше будет жрать?
J>да, меньше.
И у меня вопрос. Вот я подставляю строку "Начался шаг" и в результате создаётся объект string и их получается всё ранво много. Как такое оптимизировать?
Здравствуйте, Аноним, Вы писали:
А>И у меня вопрос. Вот я подставляю строку "Начался шаг" и в результате создаётся объект string и их получается всё ранво много. Как такое оптимизировать?
ИМХО, во-первых константные строки представляют собой один и тот же объект.
А во-вторых сборка коротко живущих объектов очень дешева, вот те, которые переживают первую сборку мусора создают потом больше проблем для сборщика мусора. (если ошибаюсь и уже всё не так, гуру надеюсь поправят).
Re[6]: Как оптимизировать string s=""; s+="dddd";
От:
Аноним
Дата:
15.09.11 08:49
Оценка:
А>>И у меня вопрос. Вот я подставляю строку "Начался шаг" и в результате создаётся объект string и их получается всё ранво много. Как такое оптимизировать?
Ну а если я буду передавать "Начался шаг №"+StepNumber. Такие строки будут занимать много места?
Re[7]: Как оптимизировать string s=""; s+="dddd";
От:
Аноним
Дата:
15.09.11 08:56
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Ну а если я буду передавать "Начался шаг №"+StepNumber. Такие строки будут занимать много места?
Не должны. Но можно передавать и как WriteInLog("Начался шаг №{0}", StepNumber). У StringBuilder-а есть AppendFormat.
Здравствуйте, Аноним, Вы писали:
А>>>И у меня вопрос. Вот я подставляю строку "Начался шаг" и в результате создаётся объект string и их получается всё ранво много. Как такое оптимизировать?
А>Ну а если я буду передавать "Начался шаг №"+StepNumber. Такие строки будут занимать много места?
Лучше форматировать в самом StringBuilder. Операция "Начался шаг №"+StepNumber — есть создание новой строки в результате конкатенации
Здравствуйте, Аноним, Вы писали:
А>>>>>В программе используется логировение и много подобного кода. H>>>>Использовать StringBuilder
А>>>В результате памяи меньше будет жрать?
J>>да, меньше.
А>Т.е. у меня будет такой сценарий. А>
Если лог будет знатно велик, то лучше сразу указать билдеру адекватный начальный размер буфера, во всяком случае передавать ему заведомо пустую строку не имеет смысла.
H>Если лог будет знатно велик, то лучше сразу указать билдеру адекватный начальный размер буфера, во всяком случае передавать ему заведомо пустую строку не имеет смысла.
А если я сразу не знаю сколько размер. Имеет смысл указывать какое-либо кол-во. Он увеличит автоматически если строка будет превышать?
H>>Если лог будет знатно велик, то лучше сразу указать билдеру адекватный начальный размер буфера, во всяком случае передавать ему заведомо пустую строку не имеет смысла.
А>А если я сразу не знаю сколько размер. Имеет смысл указывать какое-либо кол-во. Он увеличит автоматически если строка будет превышать?
да.
Здравствуйте, Аноним, Вы писали:
А>В программе используется логировение и много подобного кода. Т.е. копится логовая строка а потом сохраняется в БД. Включил как то профилировщик памяти и оказалось больше всего в памяти находится объекты типа string.
Если нужно логирование, то лучше использовать уже готовые проверенные библиотеки (NLog, Log4net).
Они умеют сохранять логи не только в файл но и в базу данных, имеют разные уровни логирования, и еще много чего хорошего.