powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
25 сообщений из 279, страница 6 из 12
Инициализация статического класса
    #39811333
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВ,

Зато много раз видал, как из-за статиков утечки памяти возникают. Утечки памяти на платформе со сборкой мусора, Карл. Собственно, статик это фактически, наверное, единственный способ утечку памяти вызвать. Хотя, если, честно, то с синглетоном тоже такую бяку легко сделать.
А ну ка друг мой, приведи работающий пример утечки памяти из за статиков.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811339
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВпропущено...

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.
Повернутые на оптимизации? Я в жизни не видал, чтобы проблемы с перформансом были именно из-за использования нестатиков вместо статиков. Вот из-за чего угодно видал, но только не из-за этого. Ты еще начни сравнивать сколько процессорных тактов на тот или иной вызов уходит.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      static void StaticMethod()
        { }
       void NonStaticMethod()
        { }

        static void Main(string[] args)
        {
            Program program = new Program();
            StaticMethod();
            program.NonStaticMethod();


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// Program program = new Program();
	IL_0001: newobj instance void ConsoleApp2.Program::.ctor()
	IL_0006: stloc.0
	// StaticMethod();
	IL_0007: call void ConsoleApp2.Program::StaticMethod()
	// (no C# code)
	IL_000c: nop
	// program.NonStaticMethod();
	IL_000d: ldloc.0
	IL_000e: callvirt instance void ConsoleApp2.Program::NonStaticMethod()
	// (no C# code)


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

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.А я от них и не бегал) Наоборот, заметил панику в этой теме - "только для расширений!!11".
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811343
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюс
Код: c#
1.
2.
IL_0001: newobj instance void ConsoleApp2.Program::.ctor()
	IL_0006: stloc.0
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811356
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВfkthatЕвгенийВ,

Зато много раз видал, как из-за статиков утечки памяти возникают. Утечки памяти на платформе со сборкой мусора, Карл. Собственно, статик это фактически, наверное, единственный способ утечку памяти вызвать. Хотя, если, честно, то с синглетоном тоже такую бяку легко сделать.
А ну ка друг мой, приведи работающий пример утечки памяти из за статиков.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Foo {
    private static List<Foo> _theListOfAllFoo = new LIst<Foo>();

    private byte[] _someVeryLargeArray = new byte[100500];  

    public Foo() {
        _theListOfAllFoos.Add(this);
    }
}

for(var i = 0; i < 100500; i++) {
    new Foo();
}


Наиболее часто встречающаяся ситуация сродни этой - это подписаться на какой-нибудь статический ивент, а потом от него не отписаться.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811359
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще говоря вызов через инстанц.
1. Создание объекта - выделение памяти.
2. Сохранение ссылки на него в памяти.
3. Извлечение ссылки из памяти в стек (this передается первым параметром в метод)
4. Поиск ссылки на метод в таблице виртуальных методов
5. Вызов метода
6. GC собирает объект

Это те пункты, которых не будет при вызове статик метода.

Не нужен в методе this - делай статик!
Нужен простой публичный утилитный метод - суй его в статик класс.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811362
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Foo {
    private static List<Foo> _theListOfAllFoo = new LIst<Foo>();

    private byte[] _someVeryLargeArray = new byte[100500];  

    public Foo() {
        _theListOfAllFoos.Add(this);
    }
}

for(var i = 0; i < 100500; i++) {
    new Foo();
}



Ты привел очень сложный пример, попробуй так
Код: c#
1.
ulong[] arr = new ulong[ulong.MaxValue];


Не путай нехватку памяти и утечку памяти.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811363
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ callvirt - Карл!
Что мне твой машинный код - ты приведи реальный пример из жизни, когда бы статик/нестатик реально влиял на производительность. Так и представил себе какое-нибудь десктопное приложение тормозящее из-за того что там вместо статиков нестатики. А сallvirt ничего не означает - он используется для вызова любого инстанс-метода, хоть виртуального, хоть нет. Вызываются они при этои по разному. Иначе все методы были бы виртуальными, как в Java, кажись - кстати, что-то не слышал, чтобы они из-за этого изстрадались.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811364
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНе нужен в методе this - делай статик!
Нужен простой публичный утилитный метод - суй его в статик класс.

И пиши все на статиках, блеат. Ога. :- D
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811365
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811369
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНе путай нехватку памяти и утечку памяти.
Там и есть именно утечка памяти. Но, поскольку, судя по твоему прошлому сообщению ты имеешь очень слабое представление о том как на самом деле в .NET работает выделение памяти и GC, то объяснять тебе тут это получится слишком долго. Начни лучше с чтения Рихтера, что ли.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811377
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое

Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811412
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕвгенийВ callvirt - Карл!
Что мне твой машинный код - ты приведи реальный пример из жизни , когда бы статик/нестатик реально влиял на производительность. Так и представил себе какое-нибудь десктопное приложение тормозящее из-за того что там вместо статиков нестатики. А сallvirt ничего не означает - он используется для вызова любого инстанс-метода, хоть виртуального, хоть нет. Вызываются они при этои по разному. Иначе все методы были бы виртуальными, как в Java, кажись - кстати, что-то не слышал, чтобы они из-за этого изстрадались.

HttpClient
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811419
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое

Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.

под нагрузкой IoC добавляет тормозов. лично я на затыки тут не натыкался, но, теоретически, они могут быть
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811422
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatRoman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое

Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.Эти принципы придумали люди, исходя из собственной конкретной практики, которая может в значительной мере отличаться от любой другой практики. Слепое и маниакальное следование всем этим принципам превращает хэлло ворлд в многослойное говно, в котором абстракция на абстракции едет и абстракцией погоняет, в результате чего вообще непонятно, как это работает, и куда заныкана реализация. А если еще и DI прикручено - вообще туши свет.

Как раз с таким хелловорлдом я на днях мучался. Тот, кто его писал, по-моему применил все принципы, паттерны и бест-кейсы, которые знал. Казалось бы, тривиальная задача - сохранить дюжину настроек в xml: формочка + save/load, да еще до сервера достучаться, чтобы логин/пароль проверить. И задача эта разбита на 4 (четыре, карл!) проекта. В одном модели и абстракции для UI, в другом модели и абстракции для хранилища, 3 и 4, соответственно UI (из одной формочки) и хранилище. В результате workflow этого говна совершенно невразумительно. Не говоря уж о том, что на все 4 кучки нужны ссылки в основном проекте.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811423
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachfkthatпропущено...


Нет, не десятое. Статический метод означает что все что от него зависит должно его вызывать напрямую и, значит, зависеть от него напрямую. Есть принципы SOLID, и это их нарушает (тот, что "D"). Эти принципы придумали люди, которые намного умнее и опытнее и меня и тебя вместе взятых - мне этого уже достаточно, чтобы стараться им следовать.

под нагрузкой IoC добавляет тормозов. лично я на затыки тут не натыкался, но, теоретически, они могут быть
да, да, ребята из stackoverflow по этой причине и не используют DI
правда нам до их нагрузок как пешком до Луны, но это же мелочи, правда? :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811444
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЭти принципы придумали люди, исходя из собственной конкретной практики, которая может в значительной мере отличаться от любой другой практики.
А инженеры Тойоты придумали что надо заправлять её 98-м бензином, потому что им это во сне приснилось. Но мы-то умнее их и лучше их машину знаем - так что будем экономить и в соседнем колхозе заливать 76-й.

Вот же белять, российский менталитет. Напиши человеку аршинным капсом, что сюда лезть нельзя, потому что током долбанет, но, он все равно решит, что ему виднее, чем тому, кто это писал и обязательно туда полезет.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811445
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesСмахивает на юношеский максимализм\нигилизм. Все полезно в меру.
Мне кажется проблема больше не в статических методах, а в статических полях, а какой метод, статический или нет, это дело десятое
Статические поля - сразу же возможная засада с thread-safety.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811449
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachHttpClient

Cерьезно? HttpClient потенциально тормозной не из-за того что в интернет лезет, а из-за того, что он не статический? Ты хоть понял, что ты за бугагос сейчас написал?

Кстати, это еще один класс, который у нас везде завернут в обертку с интерфейсом. Ибо писать и гонять юнит-тесты, которые зависят от каких-то других сетевых сервисов, это было бы вообще писец. Точнее это были бы вообще даже близко не юнит тесты.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811453
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachлично я на затыки тут не натыкался
Первый же запрос к i/o (БД, хттп, файловая система) накроет все дополнительные расходы на виртуальные вызовы, DI и подобное, как бык овцу.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811456
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatAntonariyЭти принципы придумали люди, исходя из собственной конкретной практики, которая может в значительной мере отличаться от любой другой практики.
А инженеры Тойоты придумали что надо заправлять её 98-м бензином, потому что им это во сне приснилось. Но мы-то умнее их и лучше их машину знаем - так что будем экономить и в соседнем колхозе заливать 76-й.А я тоже могу придумать якобы аналогию, которая на самом деле нифига не аналогия, и выставить себя дураком. Но я-то умнее, поэтому делать этого не буду.

Автомобиль не поставляется в виде конструктора "сделай сам", в отличие от нашей предметной области.

fkthatВот же белять, российский менталитет. Напиши человеку аршинным капсом, что сюда лезть нельзя, потому что током долбанет, но, он все равно решит, что ему виднее, чем тому, кто это писал и обязательно туда полезет.Глупость, написанная капсом, умностью не становится.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811457
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachHttpClient

Cерьезно? HttpClient потенциально тормозной не из-за того что в интернет лезет, а из-за того, что он не статический? Ты хоть понял, что ты за бугагос сейчас написал?

Кстати, это еще один класс, который у нас везде завернут в обертку с интерфейсом. Ибо писать и гонять юнит-тесты, которые зависят от каких-то других сетевых сервисов, это было бы вообще писец. Точнее это были бы вообще даже близко не юнит тесты.

Ну вашето это не я только натыкался. Народ юзал Статик, и МС пошёл навстречу страждущим и сделал фабрику - тот же Статик, только с интеллигентным лицом
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811466
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyГлупость, написанная капсом, умностью не становится.

AntonariyНо я-то умнее
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811487
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatlove_bachлично я на затыки тут не натыкался
Первый же запрос к i/o (БД, хттп, файловая система) накроет все дополнительные расходы на виртуальные вызовы, DI и подобное, как бык овцу.

ну, есть же поддержка async в проваедерах БД, хттп...
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811490
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче, я против статиков, я за IoC, но, есть же случаи, когда у кого-то, когда это не подходит :)
...
Рейтинг: 0 / 0
25 сообщений из 279, страница 6 из 12
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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