Как оптимизировать string s=""; s+="dddd";
От: Аноним  
Дата: 15.09.11 08:07
Оценка:
В программе используется логировение и много подобного кода. Т.е. копится логовая строка а потом сохраняется в БД. Включил как то профилировщик памяти и оказалось больше всего в памяти находится объекты типа string.
Re: Как оптимизировать string s=""; s+="dddd";
От: hardcase Пират http://nemerle.org
Дата: 15.09.11 08:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В программе используется логировение и много подобного кода.


Использовать StringBuilder
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Как оптимизировать string s=""; s+="dddd";
От: Аноним  
Дата: 15.09.11 08:15
Оценка:
А>>В программе используется логировение и много подобного кода.
H>Использовать StringBuilder

В результате памяи меньше будет жрать?
Re[3]: Как оптимизировать string s=""; s+="dddd";
От: Jack128  
Дата: 15.09.11 08:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>В программе используется логировение и много подобного кода.

H>>Использовать StringBuilder

А>В результате памяи меньше будет жрать?


да, меньше.
Re[4]: Как оптимизировать string s=""; s+="dddd";
От: Аноним  
Дата: 15.09.11 08:37
Оценка:
А>>>>В программе используется логировение и много подобного кода.
H>>>Использовать StringBuilder

А>>В результате памяи меньше будет жрать?


J>да, меньше.


Т.е. у меня будет такой сценарий.
private readonly StringBuilder builder =new StringBuilder(String.Empty);

public void WriteInLog(string str)
{
 builder.Append(str);
}
protected void WriteLogInDB() {}


И в основном коде прогпраммы я буду писать

EventLogger.WriteInLog("Начался шаг");

EventLogger.WriteInLog("Рассчитали")

EventLogger.WriteInLog("Закончили")

И у меня вопрос. Вот я подставляю строку "Начался шаг" и в результате создаётся объект string и их получается всё ранво много. Как такое оптимизировать?
Re[5]: Как оптимизировать string s=""; s+="dddd";
От: ilusha_nil  
Дата: 15.09.11 08:39
Оценка:
Здравствуйте, Аноним, Вы писали:

Такое не надо оптимизировать.
Re[5]: Как оптимизировать string s=""; s+="dddd";
От: Аноним  
Дата: 15.09.11 08:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И у меня вопрос. Вот я подставляю строку "Начался шаг" и в результате создаётся объект 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.
Re[7]: Как оптимизировать string s=""; s+="dddd";
От: Uzzy Россия  
Дата: 15.09.11 08:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>И у меня вопрос. Вот я подставляю строку "Начался шаг" и в результате создаётся объект string и их получается всё ранво много. Как такое оптимизировать?


А>Ну а если я буду передавать "Начался шаг №"+StepNumber. Такие строки будут занимать много места?


Лучше форматировать в самом StringBuilder. Операция "Начался шаг №"+StepNumber — есть создание новой строки в результате конкатенации
Re[5]: Как оптимизировать string s=""; s+="dddd";
От: hardcase Пират http://nemerle.org
Дата: 15.09.11 09:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>>>В программе используется логировение и много подобного кода.

H>>>>Использовать StringBuilder

А>>>В результате памяи меньше будет жрать?


J>>да, меньше.


А>Т.е. у меня будет такой сценарий.

А>
А>private readonly StringBuilder builder =new StringBuilder(String.Empty);
А>


Если лог будет знатно велик, то лучше сразу указать билдеру адекватный начальный размер буфера, во всяком случае передавать ему заведомо пустую строку не имеет смысла.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Как оптимизировать string s=""; s+="dddd";
От: Аноним  
Дата: 15.09.11 10:16
Оценка:
А>>Т.е. у меня будет такой сценарий.
А>>
А>>private readonly StringBuilder builder =new StringBuilder(String.Empty);
А>>


H>Если лог будет знатно велик, то лучше сразу указать билдеру адекватный начальный размер буфера, во всяком случае передавать ему заведомо пустую строку не имеет смысла.


А если я сразу не знаю сколько размер. Имеет смысл указывать какое-либо кол-во. Он увеличит автоматически если строка будет превышать?
Re[7]: Как оптимизировать string s=""; s+="dddd";
От: Uzzy Россия  
Дата: 15.09.11 10:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>Т.е. у меня будет такой сценарий.

А>>>
А>>>private readonly StringBuilder builder =new StringBuilder(String.Empty);
А>>>


H>>Если лог будет знатно велик, то лучше сразу указать билдеру адекватный начальный размер буфера, во всяком случае передавать ему заведомо пустую строку не имеет смысла.


А>А если я сразу не знаю сколько размер. Имеет смысл указывать какое-либо кол-во. Он увеличит автоматически если строка будет превышать?

да.
Re: Как оптимизировать string s=""; s+="dddd";
От: artem.bikov  
Дата: 18.09.11 10:53
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>В программе используется логировение и много подобного кода. Т.е. копится логовая строка а потом сохраняется в БД. Включил как то профилировщик памяти и оказалось больше всего в памяти находится объекты типа string.


Если нужно логирование, то лучше использовать уже готовые проверенные библиотеки (NLog, Log4net).
Они умеют сохранять логи не только в файл но и в базу данных, имеют разные уровни логирования, и еще много чего хорошего.
Ingate Development
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.