Я вижу следующий шаблон, используемый в коде много. Оказывает ли это утечку памяти при использовании для большого количества строк и операций конкатенации строк (миллионы операций с строками разного размера).Использует ли методы из внутренних классов без инициализации объекта с использованием нового ключевого слова вызвать утечку памяти в C# Winforms
pattern = (new CommonPattern(form)).ToString();
Класс, реализующий CommonPattern выглядит следующим образом (после кипячения до кода, имеющие отношение к вопросу):
internal class CommonPattern {
private string pattern;
private TForm form;
public CommonPattern(TForm form) {
pattern = pattern + form.Name;
}
public override string ToString() {
return pattern;
}
}
Я попытался добавить деструктор, как так.
~CommonDesignerPattern() { }
При вызове этого кода в небольших проектах мы не видим никаких проблем. Однако в проектах с 150 - 200 формами мы видим значительную проблему, приводящую к исключению из памяти.
Профилировщик памяти не помог мне найти эту проблему. Когда я сделал анализ, он указал на String и byte [] как последний подозреваемый, который мне не помог.
Я работаю над небольшой частью очень большого проекта и хотел узнать, вызывает ли вызов новый, как он используется в приведенном выше коде, вызывает утечку памяти и узнает, как справиться с этим, если он был виновником.
Результаты поиска в Интернете указывают на EventHandlers. Но в частности, я хочу знать, может ли описанный выше случай привести к утечке памяти.
Как долго строки, которые вы неоднократно строите? Являются ли они более 42 500 символов? Строки, которые большие будут храниться в [большой куче объекта] (http://stackoverflow.com/q/8951836/3744182). Выделение множества строк, размер которых может вызвать фрагментацию памяти. – dbc
Если вся строка, связанная с этим, выполняется таким образом, и есть буквально миллионы таких операций, я бы рекомендовал заглянуть в http://stackoverflow.com/questions/21644658/how-to-use-stringbuilder-wisely , В большинстве случаев нет необходимости [оптимизировать его] (https://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/), но в этом случае это, вероятно, не следует упускать из виду , Тем не менее, как уже было сказано, такая конструкция ('new T(). ToString()') не должна вызывать утечки памяти. –
проблема, с которой я сталкиваюсь, занимает много времени, чтобы воспроизвести, поэтому я пытаюсь использовать разные варианты. Спасибо за ссылки на информативный контент онлайн. –