powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
25 сообщений из 279, страница 11 из 12
Инициализация статического класса
    #39812425
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВfkthat,
Код: c#
1.
 Console.WriteLine("Not static: {0}", Measure(() => Repeat(n, ()=> { var p = new Program(); p.NotStatic(); })));



Сравнение будет некорректное потому что будет сравниваться не вызов с вызовом а создание объекта + вызов с просто вызовом.
Еще будет напрягаться GC.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812435
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЕще будет напрягаться GC.
Ну, GC работает с очень низким приоритетом, т.ч. даже когда он напрягается, то старается не сильно напрягать само приложение.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812444
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
ОК. Будешь вторым балаболом на всем sql.ru.

Петро, ты расскажи лучше почтенной публике, за что тебя из Жавы выгнали - ты там тоже везде статические баттон-клики внедрить пытался?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812446
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВЕще будет напрягаться GC.
Ну, GC работает с очень низким приоритетом, т.ч. даже когда он напрягается, то старается не сильно напрягать само приложение.
тебе самое время почитать про сборку мусора :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812451
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВтебе самое время почитать про сборку мусора :)
Что не так? Сборщик мусора просыпается, когда приложение простаивает. Для тебя это секрет?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812455
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мирные жители ложатся спать, мафия просыпается
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812467
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesмирные жители ложатся спать, мафия просыпается))) +1
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812469
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123fkthat,
ОК. Будешь вторым балаболом на всем sql.ru.

Петро, ты расскажи лучше почтенной публике, за что тебя из Жавы выгнали - ты там тоже везде статические баттон-клики внедрить пытался?
я тебя после фильтра вижу только квадратиком. Без текста)).
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812497
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВтебе самое время почитать про сборку мусора :)
Что не так? Сборщик мусора просыпается, когда приложение простаивает. Для тебя это секрет?
Сборщик мусора запускается только когда система не может выделить память, если все сделать на статиках, он не запустится ни разу.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812501
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем вообще думать о том, когда запускается GC? это не ваша проблема, думать об этом не нужно, думать нужно о другом, о высоком
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812504
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesзачем вообще думать о том, когда запускается GC? это не ваша проблема, думать об этом не нужно, думать нужно о другом, о высоком
Например пишешь экранное видео с 60 FPS, 1920 * 1080 * 4 * 60 = 497664000 байт/сек нужно переработать. При чем на каком нибудь целероне с 2 гигами оперативки.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812505
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 страниц о милисекундах. Теперь о сборщике.
Продолжайте.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812507
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВпишешь экранное видеовсегда можно найти задачу где потребуется затачивать свой код под ограниченные ресурсы. Тема разве про это?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812510
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ если все сделать на статиках
что это означает?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812519
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСборщик мусора запускается только когда система не может выделить память, если все сделать на статиках, он не запустится ни разу.
Это не сборщик мусора запускается, это у тебя в голове все очень запущено. Почитать про GC следует как раз тебе. Как я уже писал - попробуй с Рихтера начать "CLR via C#" или "Applied Microsoft .NET Framework".
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812543
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosЕвгенийВ если все сделать на статиках
что это означает?
Примерно это.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
        class MyMath
        {
            private double _val;
            public MyMath(double val)
            {
                _val = val;
            }
            public double Sin()
            {
                return Math.Sin(_val);
            }
        }
        const int C1 = 100000000;
        static void Main(string[] args)
        {
           
          for(int i=0;i<C1;i++)
            {
                var x = Math.Sin(i);
            }
            Console.WriteLine(GC.CollectionCount(0));
            Console.WriteLine(GC.GetTotalMemory(false));

            for(int i=0;i<C1;i++)
            {
                var y = new MyMath(i);
                var x = y.Sin();
            }
            Console.WriteLine(GC.CollectionCount(0));
            Console.WriteLine(GC.GetTotalMemory(false));

            Console.ReadLine();

        }
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812545
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВПримерно это.
Тебе, по-моему, бесполезно объяснять, что объекты подобных классов никто не станет создавать каждый раз, а сделают синглтоном.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812734
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С инициализацией статиков есть еще одна интересная засада, я как-то сейчас даже забыл про неё упомянуть. Что будет, если инициализация кинет ексепшен?

А будет вот что
CLR больше не будет предпринимать попытки снова инициализировать этот статический класс, заставить его это сделать тоже никак нельзя, т.ч. класс так и будет висеть неинициализированным до завершения приложения.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812793
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
А ты попробуй.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    class C
        {
            static C()
            {
                var x = 0;
                var d = 7 / x;
            }
        }
      
        static void Main(string[] args)
        {

            C c = new C();
            Console.ReadLine();

        }
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812804
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Я сейчас вместо этого попробовал вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
    public static class Foo
    {
        static Foo()
        {
            Console.WriteLine("Entering constructor.");
            var x = 0;
            var y = 42 / x;
            Z = 69;
        }

        public static int Z { get; }
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            for (var i = 0; i < 6; i++)
            {
                try
                {
                    Console.WriteLine(Foo.Z);
                }
                catch
                {
                    Console.WriteLine("Exception thrown.");
                }
            }
        }
    }



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Entering constructor.
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException
Exception thrown: System.TypeInitializationException

Поведение оказалось даже более забавное, чем я ожидал. Похоже, что после того как один ексепшен выкидывается из конструктора, обращение к какому-то статическому методу или свойству автоматом кидает TypeInitializationException, даже не пытаясь снова этот конструктор выполнить.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813004
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Поведение оказалось даже более забавное, чем я ожидал. Похоже, что после того как один ексепшен выкидывается из конструктора, обращение к какому-то статическому методу или свойству автоматом кидает TypeInitializationException, даже не пытаясь снова этот конструктор выполнить.
Нормальное поведение. Если тип не инициализован, использовать его нельзя.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813016
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
Console.WriteLine("Exception thrown.");


Exception thrown: System.TypeInitializationException

Код и результаты выполнения не совпадают :D

кстати, если в блоке catch {} (без указания типа исключения) остановить отладчик, то можно посмотреть значение исключения через "переменную" $exception в QuickWatch (Shift+F9), но только в режиме отладки
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813020
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthatПоведение оказалось даже более забавное, чем я ожидал. Похоже, что после того как один ексепшен выкидывается из конструктора, обращение к какому-то статическому методу или свойству автоматом кидает TypeInitializationException, даже не пытаясь снова этот конструктор выполнить.
Нормальное поведение. Если тип не инициализован, использовать его нельзя.скажу больше. Не рекомендуют райзе в конструкторе во многих ЯП, а не только в шарпе).
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813023
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНормальное поведение. Если тип не инициализован, использовать его нельзя.

Это естественно, засада в том, что его после первой неудачи никак уже нельзя попытаться инициализировать повторно. Например, Lazy<T> имеет специальный параметр в конструкторе, который как раз позволяет то или иное поведение при неуспешной инициализации выбрать.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39813042
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat Например, Lazy<T> имеет специальный параметр в конструкторе, который как раз позволяет то или иное поведение при неуспешной инициализации выбрать.
Удивительное рядом. Это какой такой параметр?
...
Рейтинг: 0 / 0
25 сообщений из 279, страница 11 из 12
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]