Re[20]: Один умный вещь скажу
От: GlebZ Россия  
Дата: 10.11.05 16:37
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Уверен?

Уже не знаю. Жду AndrewVK.

ПК>http://msdn.microsoft.com/msdnmag/issues/1100/GCI/default.aspx

ПК>

ПК>by default, Finalize methods are not called for unreachable objects when an application exits so that the application may terminate quickly

Не читай Рихтера за 2000 год. Он писал про какую то левую бету(первая версии книжки также была о ней). Все работает. На всякий случай даже проверил:
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace Test
{
    class Test
    {

        public class TestGC
        {
            public TestGC(){}
             ~TestGC(){Console.WriteLine("exit");}
        }
        static void Main()
        {
            {
                TestGC t=new TestGC();
            }
        }
    }
}

Работает.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Один умный вещь скажу
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.11.05 16:39
Оценка: 9 (1)
Здравствуйте, GlebZ, Вы писали:

GZ>>>Не-а, будет вызываться. Хотя бы при выходе из программы.

AVK>>Совсем не обязательно.
GZ>Example?

The Finalize method might not run to completion or might not run at all in the following exceptional circumstances:


The runtime continues to Finalize objects during shutdown only while the number of finalizable objects continues to decrease.

... << RSDN@Home 1.2.0 alpha rev. 619>>
AVK Blog
Re[20]: Один умный вещь скажу
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.11.05 16:39
Оценка: 20 (1)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Уверен?


ПК>http://msdn.microsoft.com/msdnmag/issues/1100/GCI/default.aspx

ПК>

ПК>by default, Finalize methods are not called for unreachable objects when an application exits so that the application may terminate quickly


Еще одна цитата, на этот раз из MSDN

The Finalize method might not run to completion or might not run at all in the following exceptional circumstances:


The runtime continues to Finalize objects during shutdown only while the number of finalizable objects continues to decrease.

... << RSDN@Home 1.2.0 alpha rev. 619>>
AVK Blog
Re[18]: Один умный вещь скажу
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.11.05 16:39
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Если под отсутствием утечек понимать освобождение памяти по крайней мере в момент завершения программы


Почему обязательно в момент завершения? Судя по янусу уж раз в час то уборка 2-го поколения вызывается.
... << RSDN@Home 1.2.0 alpha rev. 619>>
AVK Blog
Re[18]: Один умный вещь скажу
От: WolfHound  
Дата: 10.11.05 17:47
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

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

Запусти эту программу
using System;

namespace GCTest
{
    class Program
    {
        const int testCount = 10;

        const int objectCount = 1000;
        const int iterCount = 100000;
        const int minObjSize = 1000;
        const int maxObjSize = 10000;

        static void PrintGCInfo()
        {
            for (int i = 0; i <= GC.MaxGeneration; ++i)
                Console.WriteLine("Generation {0} collection count = {1}", i, GC.CollectionCount(i));
        }

        static void Test()
        {
            byte[][] arr = new byte[objectCount][];
            Random r = new Random();
            for (int j = 0; j < iterCount; ++j)
            {
                arr[r.Next(arr.Length)] = new byte[r.Next(minObjSize, maxObjSize)];
            }
        }

        static void Main(string[] args)
        {
            for (int i = 0; i < testCount; ++i)
            {
                Test();

                Console.WriteLine("Test       {0}/{1}", i + 1, testCount);
                PrintGCInfo();
                Console.WriteLine();
            }
        }
    }
}

Тут хорошо видно что сборка второго поколения происходит довольно активно.
Test       1/10
Generation 0 collection count = 110
Generation 1 collection count = 46
Generation 2 collection count = 8

Test       2/10
Generation 0 collection count = 218
Generation 1 collection count = 92
Generation 2 collection count = 12

Test       3/10
Generation 0 collection count = 330
Generation 1 collection count = 134
Generation 2 collection count = 22

Test       4/10
Generation 0 collection count = 439
Generation 1 collection count = 180
Generation 2 collection count = 28

Test       5/10
Generation 0 collection count = 548
Generation 1 collection count = 225
Generation 2 collection count = 36

Test       6/10
Generation 0 collection count = 662
Generation 1 collection count = 271
Generation 2 collection count = 46

Test       7/10
Generation 0 collection count = 772
Generation 1 collection count = 316
Generation 2 collection count = 54

Test       8/10
Generation 0 collection count = 882
Generation 1 collection count = 362
Generation 2 collection count = 60

Test       9/10
Generation 0 collection count = 994
Generation 1 collection count = 407
Generation 2 collection count = 70

Test       10/10
Generation 0 collection count = 1104
Generation 1 collection count = 451
Generation 2 collection count = 78

У меня на машине объем занимаемой памяти (по показаниям task manager'а) держался гдето в районе 30М пик 65М.
ЗЫ .NET 2.0 RC
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[20]: Один умный вещь скажу
От: GlebZ Россия  
Дата: 10.11.05 18:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Про первое я вспомнил, просто не говорил так как это вопрос о том, что криминальная ошибка привела к невызову finalize. Про второе, тоже можно было догадаться. Возможно еще будут проблемы при вызове а ля StackOverflow OutOfMemory exception. Правда может он подпадает под пункт два.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Один умный вещь скажу
От: c-smile Канада http://terrainformatica.com
Дата: 10.11.05 20:37
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, c-smile, Вы писали:


CS>>А зачем его звать-то ? Он сам вызывается при выходе из зоны видимости.

S>Если у тебя все разрушается при выходе из области видимости, то никакой GC не нужен. Да и мемори менеджер тоже — стек аллокатор будет более чем достаточен.

Смотря для чего. А если я не знаю размер требуемой памяти в момент компиляции?
Re[20]: Один умный вещь скажу
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.05 00:58
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:


>> ПК>Т.е.? Даже все Finalizers в обязательном порядке будут вызваны?


>> Ну да.


ПК>Уверен?


ПК>http://msdn.microsoft.com/msdnmag/issues/1100/GCI/default.aspx

ПК>

ПК>by default, Finalize methods are not called for unreachable objects when an application exits so that the application may terminate quickly


Все так, но по жизни проблем это не создает. Два случая в которых не вызваются финалайзеры:
1. Завис один из финалайзеров.
2. Процесс удален как-то по варварски.

Первый случай — баг. И но довольно легко отлавливается. К тому же я таких проблем еще не встречал.
Второй случай просто не интересен, так как при завершении приложения все внешние сслки на ресурсы автоматически закрывает ОС. А внутрениие уже никого не колышут.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Один умный вещь скажу
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.05 00:58
Оценка:
Здравствуйте, AndrewVK, Вы писали:

ПК>>Если под отсутствием утечек понимать освобождение памяти по крайней мере в момент завершения программы


AVK>Почему обязательно в момент завершения? Судя по янусу уж раз в час то уборка 2-го поколения вызывается.


Статистика по моему Янусу:
78 уборок второго поколения с момента запуска. Янус был запущен в 4:00 10.11.2005.
Общее потребленное процессорное время 12 с половиной часов.

То есть при активной работе сборка идет чаще чем раз в час. При теневой работе практически не происходит. Что и логично.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Один умный вещь скажу
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.11.05 06:36
Оценка:
Здравствуйте, c-smile, Вы писали:
S>>Если у тебя все разрушается при выходе из области видимости, то никакой GC не нужен. Да и мемори менеджер тоже — стек аллокатор будет более чем достаточен.

CS>Смотря для чего. А если я не знаю размер требуемой памяти в момент компиляции?

Неважно. Стек ограничивает только порядок освобождения.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Кто-нибудь знает адрес Герберта Шилдта?
От: leper Россия  
Дата: 11.11.05 07:36
Оценка: 6 (1)
Здравствуйте, c-smile, Вы писали:

sch>>...Сборщик мусора он реализовал путем подсчета ссылок;


CS>reference counting как одно из средств memory management — работает. И кстати на определнных задачах

CS>эффектвнее других механизмов GC в разы. А какие проблемы ты видишь?

sch>>а проблему кольцевых ссылок он решает следующим образом: при завершении работы программы сборщик мусора просто освобождает все неосвобожденные участки


CS>И чего? Так работает любой GC.


Рекомендую ознакомиться с лучшим трудом (IMHO) по алгоритмам GC — Garbage Collection : Algorithms for Automatic Dynamic Memory Management. Хотел дать электронную версию (скан), но по правилам форумов нельзя (поправьте если не прав). Eсли сильно надо — стучитесь в мыло (см. профайл).
Think for yourself. Question authory.
Re[17]: Один умный вещь скажу
От: c-smile Канада http://terrainformatica.com
Дата: 11.11.05 07:45
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, c-smile, Вы писали:

S>>>Если у тебя все разрушается при выходе из области видимости, то никакой GC не нужен. Да и мемори менеджер тоже — стек аллокатор будет более чем достаточен.

CS>>Смотря для чего. А если я не знаю размер требуемой памяти в момент компиляции?

S>Неважно. Стек ограничивает только порядок освобождения.

Смотря когда и по чем

Есть например такая функция — мизерекордия:

SetThreadStackGuarantee
Re[21]: Один умный вещь скажу
От: GlebZ Россия  
Дата: 11.11.05 12:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Второй случай просто не интересен, так как при завершении приложения все внешние сслки на ресурсы автоматически закрывает ОС.

Второй тоже баг. Максимум использование Net из unmanaged — это интерфейсы COM. При этом FreeLibrary внешним процессом не должны вызываться. В самом Net все без эксцессов.
VD>А внутрениие уже никого не колышут.
Могут колыхать. Буффер файла будет потерян.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[22]: Один умный вещь скажу
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.05 14:23
Оценка: :)
Здравствуйте, GlebZ, Вы писали:

VD>>Второй случай просто не интересен, так как при завершении приложения все внешние сслки на ресурсы автоматически закрывает ОС.

GZ>Второй тоже баг. Максимум использование Net из unmanaged — это интерфейсы COM. При этом FreeLibrary внешним процессом не должны вызываться. В самом Net все без эксцессов.

Какой на фиг FreeLibrary? Кому он интересен? Ну, и проблемы КОМ-а есть проблемы КОМ-а. Не нужно их к дотнету привязывать.

VD>>А внутрениие уже никого не колышут.

GZ>Могут колыхать. Буффер файла будет потерян.

Что?
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Один умный вещь скажу
От: GlebZ Россия  
Дата: 11.11.05 14:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Какой на фиг FreeLibrary? Кому он интересен? Ну, и проблемы КОМ-а есть проблемы КОМ-а. Не нужно их к дотнету привязывать.

Поэтому и считаю что пункт второй может произойти также в результате баги.

VD>>>А внутрениие уже никого не колышут.

GZ>>Могут колыхать. Буффер файла будет потерян.
VD>Что?
У тебя идет буфферизированная запись в файл. В случае если не был вызван диспозе, то файл то будет закрыт, но данные буфера будут потеряны.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: Один умный вещь скажу
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.05 16:14
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>У тебя идет буфферизированная запись в файл. В случае если не был вызван диспозе, то файл то будет закрыт, но данные буфера будут потеряны.


Ну, то есть если у меня идет не буферизированная запись и она обрываетя на полуслове, то это нормально?

Забавно!

Может простно нужно понять, что ненормальное завершение прилоежния есть ненормальное завершение и при этом обсуждать проблемы финалайзеров просто смешно. Деструкторы ведь тоже могут не вызваться.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Один умный вещь скажу
От: GlebZ Россия  
Дата: 11.11.05 16:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Может простно нужно понять, что ненормальное завершение прилоежния есть ненормальное завершение и при этом обсуждать проблемы финалайзеров просто смешно. Деструкторы ведь тоже могут не вызваться.

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

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Один умный вещь скажу
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.05 19:09
Оценка:
Здравствуйте, GlebZ, Вы писали:

VD>>Может простно нужно понять, что ненормальное завершение прилоежния есть ненормальное завершение и при этом обсуждать проблемы финалайзеров просто смешно. Деструкторы ведь тоже могут не вызваться.

GZ>Собственно это мы и пытаемся друг другу доказать

Тогда нужо понять о чем мы говорим.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Один умный вещь скажу
От: GlebZ Россия  
Дата: 11.11.05 19:48
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, GlebZ, Вы писали:


VD>>>Может простно нужно понять, что ненормальное завершение прилоежния есть ненормальное завершение и при этом обсуждать проблемы финалайзеров просто смешно. Деструкторы ведь тоже могут не вызваться.

GZ>>Собственно это мы и пытаемся друг другу доказать

VD>Тогда нужо понять о чем мы говорим.



С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Кто-нибудь знает адрес Герберта Шилдта?
От: Kemm  
Дата: 20.11.05 10:12
Оценка:
Здравствуйте, c-smile, Вы писали:

sch>> Mini C++ это тот же интерпретатор подмножества бейсика, который он дал в свой книжке "Профессиональное программирование на Turbo C" двадцать лет назад

CS>So what? Еще одно поколение программеров научится писать инетрпретаторы.
CS>Простота изложения проблемы Шилдтом очень помогает на ранних преиодах освоения.
CS>Провернно на личном опыте.

Ужасненько.(с)Цири
Учиться писать интерпретаторы нужно по небезысветсной Dragon Book. Делать это по Шилдту -- это примерно то же, что учиться управлять реактивным истребителем по какой-нибудь "Управление любым средством перевижения за 21 минуту" 8))
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.