Re[2]: Жор памяти
От: TK Лес кывт.рф
Дата: 02.02.04 19:23
Оценка: :))) :)
Hello, "Michael Chelnokov"
>
> iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?
> А каким образом в managed-коде можно "наплодить лишних ссылок"?

Никаких проблем:
static ArrayList memoryLeakHolder = new ArrayList();    // складывать весь мусор тут
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Жор памяти
От: mihailik Украина  
Дата: 03.02.04 09:09
Оценка: :))
iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки

А с чего ты так решил?
... << RSDN@Home 1.1.3 beta 1 >>
Re[3]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.02.04 18:06
Оценка: 12 (1)
Здравствуйте, Igor Trofimov, Вы писали:

Попробуй http://www.microsoft.com/rus/msdn/magazine/archive/2003-01/projection.asp
Можешь скачать исходники
http://www.microsoft.com/rus/msdn/magazine/archive/2003-01/
и солнце б утром не вставало, когда бы не было меня
Re: Жор памяти
От: TK Лес кывт.рф
Дата: 02.02.04 18:41
Оценка: 1 (1)
Hello, "Igor Trofimov"

> За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).

>
> Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?
>
> Как бы так посмотреть соотношения тип/кол-во для всех объектов, существующих в памяти приложения? Уже после того, как оно поработало пару дней?

Написать стресс тесты и изначально запустить под профайлером?
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Жор памяти
От: Воронков Василий Россия  
Дата: 02.02.04 19:16
Оценка: 1 (1)
Здравствуйте, Michael Chelnokov, Вы писали:

iT>>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?


MC>А каким образом в managed-коде можно "наплодить лишних ссылок"?


А что кто-то это запрещает?
... << RSDN@Home 1.1.3 beta 1 >>
Re[5]: Жор памяти
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.02.04 07:27
Оценка: 1 (1)
Здравствуйте, Igor Trofimov, Вы писали:

iT>Я вот тоже удивился — ну где и чего я мог такого налажать?

iT>Если найду — расскажу.

Самое опасное в этом плане — глобальные кеши и делегаты. Проверь чтобы ты везде отписывался от событий в ненужных объектах и чистил кеши.
... << RSDN@Home 1.1.3 beta 2 >>
AVK Blog
Re: Жор памяти
От: Спасибо  
Дата: 02.02.04 20:05
Оценка: -1
Здравствуйте, Igor Trofimov, Вы писали:

iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).


iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?


По моему мнению,
Впринципе GC так и должен был сработать, так как сам говоришь что памяти дофига еще оставалось. Просто если система потребует памяти а ее не окажется, тогда пинка под зад даст GC-ру и он начнет шевелится. А так он впринципе правильно что спит — нефиг лишний раз систему нагружать, пока оперативка есть можно и поспать. Потом проснеться почистит за пару сек и снова три дня спать.
Эх мне бы так.
Re[2]: Жор памяти
От: Dovgan  
Дата: 31.03.09 14:03
Оценка: :)
Здравствуйте, Igor Trofimov, Вы писали:

iT>В общем, если кому интересно, вынес я работу с AD в отдельный AppDomain и все стало шоколадно. Поработал — грохнул. Поработал — грохнул.


iT>На досуге надо будет еще проверить на маленьком тесте — действительно ли любое использование AD блокирует сборку мусора или это у меня какое-то особо неприятное стечение обстоятельств было.



Меня тоже посетила эта мысль, но почему-то не помогло. Допускаю, что я по неопытности мог что-то не так сделать с AppDomain, но память из него у меня тоже течет. Мне бы примерчик...
Жор памяти
От: Igor Trofimov  
Дата: 02.02.04 17:17
Оценка:
За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).

Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?

Как бы так посмотреть соотношения тип/кол-во для всех объектов, существующих в памяти приложения? Уже после того, как оно поработало пару дней?
Re: Жор памяти
От: Michael Chelnokov Украина  
Дата: 02.02.04 19:05
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?


А каким образом в managed-коде можно "наплодить лишних ссылок"?
Re[3]: Жор памяти
От: Michael Chelnokov Украина  
Дата: 02.02.04 19:46
Оценка:
Здравствуйте, TK, Вы писали:

>> А каким образом в managed-коде можно "наплодить лишних ссылок"?

TK>Никаких проблем:
TK>
TK>static ArrayList memoryLeakHolder = new ArrayList();    // складывать весь мусор тут
TK>

Извиняюсь, забыл дописать "... находясь в здравом уме и твердой памяти"
Re[4]: Жор памяти
От: Igor Trofimov  
Дата: 02.02.04 20:06
Оценка:
MC>Извиняюсь, забыл дописать "... находясь в здравом уме и твердой памяти"

Я вот тоже удивился — ну где и чего я мог такого налажать?
Если найду — расскажу.
Re[2]: Жор памяти
От: Undying Россия  
Дата: 02.02.04 20:07
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>А каким образом в managed-коде можно "наплодить лишних ссылок"?


Можно забыть отписать объект от события.
... << RSDN@Home 1.1 beta 2 >>
Re[3]: Жор памяти
От: Спасибо  
Дата: 02.02.04 20:11
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, Michael Chelnokov, Вы писали:


MC>>А каким образом в managed-коде можно "наплодить лишних ссылок"?


U>Можно забыть отписать объект от события.


Товарищ, бессмертный, можно по подробнее что это значит. Лучше прямо кусок кода. Всмысле делегат создать, "прибавить" к какому-нить событию и не удалить ?
Re[4]: Жор памяти
От: Undying Россия  
Дата: 02.02.04 20:36
Оценка:
Здравствуйте, Спасибо, Вы писали:

U>>Можно забыть отписать объект от события.


С>Товарищ, бессмертный, можно по подробнее что это значит. Лучше прямо кусок кода. Всмысле делегат создать, "прибавить" к какому-нить событию и не удалить ?


Конечно, можно.

    private void menuItem1_Click(object sender, System.EventArgs e)
    {
      MyClass my = new MyClass(this.Size.Height.ToString());
      this.SizeChanged += new EventHandler(my.SizeChanged);      
    }
    public class MyClass
    {
      public string Name = "";
      public MyClass(string name)
      {
        this.Name = name;
      }
      public void SizeChanged(object sender, System.EventArgs e)
      {
        MessageBox.Show(Name);
      }
    }


При каждом клике на пункт меню будет создавать еще один экземпляр MyClass и умрут они только вместе с формой.
... << RSDN@Home 1.1 beta 2 >>
Re[5]: Жор памяти
От: Спасибо  
Дата: 02.02.04 20:46
Оценка:
U>
U>    private void menuItem1_Click(object sender, System.EventArgs e)
U>    {
U>      MyClass my = new MyClass(this.Size.Height.ToString());
U>      this.SizeChanged += new EventHandler(my.SizeChanged);      
U>    }
U>    public class MyClass
U>    {
U>      public string Name = "";
U>      public MyClass(string name)
U>      {
U>        this.Name = name;
U>      }
U>      public void SizeChanged(object sender, System.EventArgs e)
U>      {
U>        MessageBox.Show(Name);
U>      }
U>    }
U>


U>При каждом клике на пункт меню будет создавать еще один экземпляр MyClass и умрут они только вместе с формой.


Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..
Re[6]: Жор памяти
От: Undying Россия  
Дата: 02.02.04 21:14
Оценка:
Здравствуйте, Спасибо, Вы писали:

С>Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..


Не совсем, когда создается переменная на уровне формы, то понятно, что она очистится только при закрытии формы. В ситуации с событиями все куда менее прозрачно. Например, в приведенном примере была создана локальная переменная, которая вроде должна уничтожиться при выходе из метода, но на самом деле этого не произойдет.
... << RSDN@Home 1.1 beta 2 >>
Re[7]: Жор памяти
От: Спасибо  
Дата: 02.02.04 22:35
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, Спасибо, Вы писали:


С>>Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..


U>Не совсем, когда создается переменная на уровне формы, то понятно, что она очистится только при закрытии формы. В ситуации с событиями все куда менее прозрачно. Например, в приведенном примере была создана локальная переменная, которая вроде должна уничтожиться при выходе из метода, но на самом деле этого не произойдет.


Но она помещалась в вполне нелокальный список (в плане делегат события)
Впринципе событие очень похоже на ArrayList в который складываются делегаты.
Re: Жор памяти
От: Poudy Россия  
Дата: 03.02.04 07:32
Оценка:
Посмотри на размер различных поколений. Может быть, у тебя некоторые объекты плавно и стабильно попадают во второе поколение?
Re: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.02.04 10:27
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).


Может в этом проблема
http://www.gotdotnet.ru/default.aspx?s=board_search&amp;d_no=0&amp;text=SetProcessWorkingSetSize
и солнце б утром не вставало, когда бы не было меня
Re[2]: Жор памяти
От: Igor Trofimov  
Дата: 03.02.04 17:21
Оценка:
M>А с чего ты так решил?

А в TaskManager посмотрели.
Re[3]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.02.04 17:24
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

M>>А с чего ты так решил?


iT>А в TaskManager посмотрели.

http://www.gotdotnet.ru/DotNet/FAQ/CommonForum/524.aspx
и солнце б утром не вставало, когда бы не было меня
Re[3]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.02.04 17:42
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

M>>А с чего ты так решил?


iT>А в TaskManager посмотрели.

В TaskManager посмотрели ты видишь не выделенную а зарезервированную память. Сам не пробовал но читал, что если сложить всю выделеннум память под процессы видимую в
TaskManager то ее будет намного больше. Просто резервируются адреса для дальнейшего использования. Кстати эффект уменьшения памяти в TaskManager можно замечать при сворачивании приложения или воспользоваться SetProcessWorkingSetSize например в
http://www.gotdotnet.ru/DotNet/FAQ/CommonForum/524.aspx
А вот если данные манипуляции не помогут то тогда уже рыть ....
и солнце б утром не вставало, когда бы не было меня
Re[4]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.02.04 18:08
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Igor Trofimov, Вы писали:


Извини вот полная статья
http://www.microsoft.com/rus/msdn/magazine/archive/2003-01/full_projection.asp
и солнце б утром не вставало, когда бы не было меня
Re[5]: Жор памяти
От: Igor Trofimov  
Дата: 03.02.04 18:49
Оценка:
Прикольно, надо будет попробовать...
Спасибо, интересная ссылочка.
Re: Жор памяти
От: Igor Trofimov  
Дата: 06.02.04 08:20
Оценка:
Итак, докладываю результаты маленьких исследований.

1. Выяснилось, что классическая связка
   GC.Collect;
   GC.WaitForPendingFinalizers;
   GC.Collect;

зависает на второй строке... отчего это может быть?

2. Выяснилось (спасибо хорошей утильке под названием .net memory profiler), что основной объем памяти отжирает некий System.DirectoryServices.Interop.AdsValueHelper. действительно, прога регулярно обращается к AD, но при этом я делаю using для всего, что шевелится.. тьфу.. для всего, что IDisposable..

Тем не менее этих самых AdsValueHelper накапливается сотни тысяч, они не умирают, и судя по stack trace'ам (которые показывает та же утилька) их создают внутренние механизмы классов DirectoryServices при работе обычных (не IDiposable) SearchResultCollection, .

Что посоветуете? Сталкивался ли кто-то с такой проблемой при работе с AD?
Re[2]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.02.04 09:57
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Итак, докладываю результаты маленьких исследований.


iT>1. Выяснилось, что классическая связка

iT>
iT>   GC.Collect;
iT>   GC.WaitForPendingFinalizers;
iT>   GC.Collect;  
iT>

iT>зависает на второй строке... отчего это может быть?
Кстати в этом же номере Джеффри Рихтер
http://www.microsoft.com/rus/msdn/magazine/archive/2003-01/dotnet.asp
Как раз рассматривал GC.WaitForPendingFinalizers; при взаимной блокировке.
Скорей всего, чтото в финализаторе блокируется.
и солнце б утром не вставало, когда бы не было меня
Re[2]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.02.04 10:15
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>2. Выяснилось (спасибо хорошей утильке под названием .net memory profiler), что основной объем памяти отжирает некий System.DirectoryServices.Interop.AdsValueHelper. действительно, прога регулярно обращается к AD, но при этом я делаю using для всего, что шевелится.. тьфу.. для всего, что IDisposable..


Самое интнресное, что у этого System.DirectoryServices.Interop.AdsValueHelper нет
IDisposable, но есть Finalize который должен перекрываться в наследниках.


protected override void Finalize()
{ try
{
if (this.pinnedHandle.IsAllocated)
{
this.pinnedHandle.Free();

}

}
finally
{
base.Finalize();

}

}
и солнце б утром не вставало, когда бы не было меня
Re[3]: Жор памяти
От: Igor Trofimov  
Дата: 06.02.04 11:23
Оценка:
S> Самое интнресное, что у этого System.DirectoryServices.Interop.AdsValueHelper нет
S>IDisposable, но есть Finalize который должен перекрываться в наследниках.

В каком смысле — "должен перекрываться в наследниках"? Он вроде и так все, что нужно — делает..
Вот только почему-то не умирают эти самые AdsValueHelper'ы ;(
Re[4]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.02.04 11:43
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

S>> Самое интнресное, что у этого System.DirectoryServices.Interop.AdsValueHelper нет

S>>IDisposable, но есть Finalize который должен перекрываться в наследниках.


iT>В каком смысле — "должен перекрываться в наследниках"? Он вроде и так все, что нужно — делает..

iT>Вот только почему-то не умирают эти самые AdsValueHelper'ы ;(
Тогда откуда должен вызываться Finalize, т.к. он протектед.
А вообще он сборочный, а ссылки на него из сборкин нет ни их одного класса.
Надо смотреть откуда он создается.
и солнце б утром не вставало, когда бы не было меня
Re[5]: Жор памяти
От: Igor Trofimov  
Дата: 06.02.04 12:05
Оценка:
Finalize вообще-то всегда protected. CLR это не мешает

S> А вообще он сборочный, а ссылки на него из сборкин нет ни их одного класса.

S>Надо смотреть откуда он создается.

profiler говорит, что создается он в SearchResultCollection.ResultsEnumerator.GetCurrentResult()
а еще в DirectorySearcher.SetSearchPreferences(...).

Смотрю Reflector'ом — и там и там действительно создается экземпляр этого типа (не потомка), (так что Reflector зря не показывает ссылку на этот тип).

Вот только мало это проясняет, увы...
Re: Жор памяти
От: Igor Trofimov  
Дата: 06.02.04 17:14
Оценка:
Блин, что же делать?
неужели никто не работал массировано с AD и не наталкивался на эти траблы?
Re[2]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.02.04 17:42
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Блин, что же делать?

iT>неужели никто не работал массировано с AD и не наталкивался на эти траблы?
Ради подддержания двнного топика...
и солнце б утром не вставало, когда бы не было меня
Re[6]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.02.04 10:25
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Finalize вообще-то всегда protected. CLR это не мешает


Прошу прощения. Пить мне надо меньше. Конечно же это деструктор, а Finalize формируемый автоматом.
И самое противное, что без IDisposable вызывается только при сборке мусора, и никакие using не помогут.
И здесь интересно
GC.Collect;
GC.WaitForPendingFinalizers;
GC.Collect;


зависает на второй строке... отчего это может быть?
Зависает бог с ним. А после него память высвобождается???
и солнце б утром не вставало, когда бы не было меня
Re[3]: Жор памяти
От: mihailik Украина  
Дата: 09.02.04 10:27
Оценка:
iT>А в TaskManager посмотрели.

Нужно повключать побольше колонок в Task Manager'е и прикинуть, что вообще каждая из них означает.

Увеличение какого-то показателя не обязательно говорит об утечках и т.п. Это разве что повод задуматься, но не разворачивать бурную деятельность по оптимизации "под TaskManager".


Вообще, трудно диагностируемые утечки бывают к примеру в таких случаях:

Неадекватная работа с COM.
Работа с БД Access.
Непродуманное использование Reflection.Emit, CodeDom и подключаемых сборок-плугинов.
Слишком широкое использование компилируемых регекспов.
... << RSDN@Home 1.1.3 beta 1 >>
Re[7]: Жор памяти
От: Igor Trofimov  
Дата: 09.02.04 11:48
Оценка:
S>И здесь интересно
S> GC.Collect;
S> GC.WaitForPendingFinalizers;
S> GC.Collect;
S> Зависает бог с ним. А после него память высвобождается???

Не-а.
Re[8]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.02.04 11:57
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

S>>И здесь интересно

S>> GC.Collect;
S>> GC.WaitForPendingFinalizers;
S>> GC.Collect;
S>> Зависает бог с ним. А после него память высвобождается???

iT>Не-а.

То есть профайлер показывает то же количество этих долбанных объектов????
А если несколько раз коллектнуть???
И в чем могут быть проблемы???
if (this.pinnedHandle.IsAllocated)
{
this.pinnedHandle.Free();

}
или base.Finalize();
и солнце б утром не вставало, когда бы не было меня
Re[2]: Жор памяти
От: mihailik Украина  
Дата: 09.02.04 18:19
Оценка:
iT>зависает на второй строке... отчего это может быть?

Например, в каком-нибудь финализере или Dispose стоит lock. Или что-нибудь похожее на более низком уровне.

Постарайся не разбрасываться объектами по разным потокам, может поможет. На крайний случай можно вообще отдельный AppDomain для продолжительных гнусностей создавать. Оно и ссылки подчистит.
... << RSDN@Home 1.1.3 beta 1 >>
Re[3]: Жор памяти
От: mihailik Украина  
Дата: 09.02.04 18:19
Оценка:
S> this.pinnedHandle.Free();

Ага, может они память пинуют и не сразу распинуют?!

Я тут недавно кидал ссылку на похожую проблему в System.Net.Socket, которая будет исправлена в Widbey.

Пока память запинована, GC не может освободить всё, что следует перед этим пинованым указателем в куче. Поэтому не рекомендуется пиноваться слишком часто. Возможно, мелкософтовцы это прохлопали.
... << RSDN@Home 1.1.3 beta 1 >>
Re[9]: Жор памяти
От: mihailik Украина  
Дата: 09.02.04 18:19
Оценка:
S> И в чем могут быть проблемы???
S> if (this.pinnedHandle.IsAllocated)

Скорее всего в слишком настырном пиновании. Пишите репорт, глядишь они исправят в следующем Framework.
... << RSDN@Home 1.1.3 beta 1 >>
Re: Жор памяти
От: Igor Trofimov  
Дата: 24.02.04 09:51
Оценка:
В общем, если кому интересно, вынес я работу с AD в отдельный AppDomain и все стало шоколадно. Поработал — грохнул. Поработал — грохнул.

На досуге надо будет еще проверить на маленьком тесте — действительно ли любое использование AD блокирует сборку мусора или это у меня какое-то особо неприятное стечение обстоятельств было.
Re[2]: Жор памяти
От: Silent_Sky Россия http://www.rsdn.ru/tools/member.aspx?id=
Дата: 09.04.04 12:30
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>2. Выяснилось (спасибо хорошей утильке под названием .net memory profiler), что основной объем памяти отжирает некий System.DirectoryServices.Interop.AdsValueHelper. действительно, прога регулярно обращается к AD, но при этом я делаю using для всего, что шевелится.. тьфу.. для всего, что IDisposable..



Млин, ткните носом меня как пользоваться этой "утильке под названием .net memory profiler" .... скачать скачал, как юзать — не въеду
Когда-нибудь и я буду много знать, но пока это не грозит...
ICQ #134433
Re[3]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.04.04 15:03
Оценка:
Здравствуйте, Silent_Sky, Вы писали:


S_S>Млин, ткните носом меня как пользоваться этой "утильке под названием .net memory profiler" .... скачать скачал, как юзать — не въеду

http://www.microsoft.com/rus/msdn/magazine/archive/2003-01/full_projection.asp
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[4]: Жор памяти
От: ili Россия  
Дата: 31.03.09 14:15
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Извиняюсь, забыл дописать "... находясь в здравом уме и твердой памяти"


запросто!

public class TestObject
{
    public static Instanse = new TestObject();
    //....
    public event Handler SomeEvent;
    //....
}

public class TestObject2
{
    public void Handler();
}

public void Test()
{
    TestObject2 to = new TestObject2();

    TestObject.SomeEvent += to.Handler; //все, утечка :) TestObject.Instanse  стал для to корнем, и to благополучно тусит в Gen 2 по гроб жизни, отписаться надо :)
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.