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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    internal interface IProgram
    {
        void Interface();
    }

    internal class Program : IProgram
    {
        public void Interface()
        {
        }



Код: powershell
1.
2.
3.
4.
Static:     00:00:00.3932091
Not static: 00:00:00.2832406
Virtual:    00:00:00.2452205
Interface:  00:00:00.2511343



Статик самый медленный. Причем, что интересно, что вызовы виртуального метода и метода интерфейса быстрее чем обычного.
Бред какой то. Протестируй нормально.

В любом случае, при такой разнице в пределах погрешности, скорость не аргумент. {C# и скорость ахах....}
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811787
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglБред какой то. Протестируй нормально.

Код я привел. Можешь сам его собрать, запустить и посмотреть

SiemarglВ любом случае, при такой разнице в пределах погрешности, скорость не аргумент.


Я тоже самое писал. Только некоторые стали тут доказывать что разница в несколько тактов на вызове метода это писец как важно.

SiemarglC# и скорость ахах.


Есть ряд случаев, когда нетовский рантайм может уделать по производительности unmanaged языки.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811797
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemargl,
Да. Скорость не аргумент в данной теме.
Только как дымовая завеса при обсуждении.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811805
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjSiemargl,
Да. Скорость не аргумент в данной теме.
Только как дымовая завеса при обсуждении.

Мне, однако, все-таки, пипец любопытно стало - как так выходит, что статический метод по вызову самый медленный. Релизная сборка, чистый запуск из командной строки - и он стабильно отстаёт по скорости от любого другого вызова в полтора раза.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811817
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat, вы жо умный посмотрите во что скомпилилось... происки оптимизатора?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811821
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat, вот тут простым языком немного общих рассуждений на эту тему... х.з. ни когда не приходилось биться за микросекунды... в основном исходят из здравого смысла, семантики самой задачи, а не тупо следуют скрижалям... так что спор инстанс вс статик - это спор между "тупоконечниками и остроконечниками"
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811829
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserfkthat, вы жо умный посмотрите во что скомпилилось... происки оптимизатора?
Оптимизация дефолтная. Для чистоты эксперимента поставил еще аттрибуты
Код: c#
1.
[MethodImpl(MethodImplOptions.NoInlining)]


и даже попробовал сделать наоборот
Код: c#
1.
[MethodImpl(MethodImplOptions.AggressiveInlining)]


Результаты одни и те же, причем аттрибуты эти, похоже, вообще никак не влияют (м.б. в нынешней версии компилятора они вообще игнорируются)

Собирал под .net core 3 и под обычный .net 4.6 и никакой разницы - везде статик тормозит.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811830
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,
Не знаю. Никогда не интересовало.
Как тут сказали, мне платят за другие вопросы)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811835
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserfkthat, вот тут простым языком немного общих рассуждений на эту тему

авторIn theory, a static method should perform slightly better than an instance method

Ну вот в том-то и дело, что "in theory", а вот я смотрю и вижу сейчас, что все совсем наоборот. Разница, конечно, совершенно ерундовая, как я уже говорил я бы даже внимания обращать на неё не стал бы никогда, но мне вот интересно, почему все-таки так получается.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811841
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВAntonariyВ общем, я понял:

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.
ваш взлетел? что за продукт? любопытно, какую архитектура и принципы разработки используете?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811889
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухЕвгенийВпропущено...

А потом, если продукт взлетит, упрешься в перфоманс и вернешься к статикам.
ваш взлетел? что за продукт? любопытно, какую архитектура и принципы разработки используете?
мазохист
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811892
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДмитрий Мухпропущено...

ваш взлетел? что за продукт? любопытно, какую архитектура и принципы разработки используете?
мазохист

Мазохизм - склонность получать удовольствие, испытывая унижения, насилие или мучения .

Что же из вышеперечисленного нас ожидает?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811893
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

счас будет тебе делать мозги, а ты получишь от этого кайф
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811895
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДмитрий Мух,

счас будет тебе делать мозги, а ты получишь от этого кайф
Что мне будут делать? Выражайся, если можно, понятным языком.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811902
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

е***ь мозг всякими лаунчерами
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811903
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДмитрий Мух,

е***ь мозг всякими лаунчерами
ЕвгенийВ - это же не ВМоисеев. Я надеюсь :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811906
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухViPRosДмитрий Мух,

е***ь мозг всякими лаунчерами
ЕвгенийВ - это же не ВМоисеев. Я надеюсь :)
ааааааааааа
перепутал, блин :)
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811972
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Инициализация статического класса
    #39811973
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatSiemarglБред какой то. Протестируй нормально.
Код я привел. Можешь сам его собрать, запустить и посмотреть

Проверил, добавил тестирование вызова стат.класса, попробовал убрать накладные от лямбды, исключить выбрасывание кода оптимизатором.
У меня в виртуалке (VS2017, release, NET4.6)
Not static: 00:00:00.3894198
Virtual: 00:00:00.5584478
Interface Call: 00:00:00.3800740
Static: 00:00:00.3692603
В ideone https://ideone.com/qTPeHC
Not static: 00:00:00.1811481
Virtual: 00:00:00.2084212
Interface Call: 00:00:00.1812678
Static: 00:00:00.1848647
Собственно, только виртуальный вызов заметно медленнее, остальное в пределах погрешностей
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811974
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЭтот не утечка памяти. Здесь все указатели на выделенную память сохранены и могут быть освобождены в любой момент.
Утечка - это выделенная память, на которую нет указателей и программа потеряла над ней контроль.

Объекты Foo никогда освобождены не будут, потому что указатели на них сохранены в статической (т.е. глобальной переменной). Пока их оттуда руками не уберешь, то они так и будут там висеть, пока приложение не завершится. Если такая шляпа происходит, например в веб-приложении, то в итоге будет жопа - я на практике такое наблюдал и даже не раз. А так-то можно сказать, что, типа, да, утечек вообще никогда не бывает, потому что из приложения, типа, все равно когда-нибудь выйдем и память при этом освободится, по-твоему так, что ли?

Есть еще более смешная известная шляпа, называется "воскрешение объекта" ("object resurrection"). Правда, это уже из разряда извращений.

Код: c#
1.
2.
3.
4.
5.
6.
7.
public class Foo {
    private static Foo _foo;

    ~Foo() {
        _foo = thiis;
    }
}



Объект, уже идя под сборку мусора, сам себя вытягивает за волосы. :))
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811982
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthatSiemarglЭтот не утечка памяти. Здесь все указатели на выделенную память сохранены и могут быть освобождены в любой момент.
Утечка - это выделенная память, на которую нет указателей и программа потеряла над ней контроль.

Объекты Foo никогда освобождены не будут, потому что указатели на них сохранены в статической (т.е. глобальной переменной). Пока их оттуда руками не уберешь, то они так и будут там висеть, пока приложение не завершится. Если такая шляпа происходит, например в веб-приложении, то в итоге будет жопа - я на практике такое наблюдал и даже не раз. А так-то можно сказать, что, типа, да, утечек вообще никогда не бывает, потому что из приложения, типа, все равно когда-нибудь выйдем и память при этом освободится, по-твоему так, что ли?
Именно это и нужно программисту при статик.
Освобождение памяти при завершении процесса.
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811997
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Результаты тестирования отменяются, оптимизатор выкинул _ВСЁ_

Код: 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.
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Размер кода:       141 (0x8d)
  .maxstack  3
  .locals init ([0] class Program prog,
           [1] int64 result)
  IL_0000:  newobj     instance void Program::.ctor()
  IL_0005:  stloc.0
  IL_0006:  ldc.i4     0x5fd8220
  IL_000b:  conv.i8
  IL_000c:  stloc.1
  IL_000d:  ldloca.s   result
  IL_000f:  call       void SClass::StatClassCall(int64&)
  IL_0014:  ldstr      "Not static: {0}"
  IL_0019:  ldloc.0
  IL_001a:  ldloca.s   result
  IL_001c:  callvirt   instance valuetype [mscorlib]System.TimeSpan Program::NonStaticCall(int64&)
  IL_0021:  box        [mscorlib]System.TimeSpan
  IL_0026:  call       void [mscorlib]System.Console::WriteLine(string,
                                                                object)
  IL_002b:  ldstr      "Virtual: {0}"
  IL_0030:  ldloc.0
  IL_0031:  ldloca.s   result
  IL_0033:  callvirt   instance valuetype [mscorlib]System.TimeSpan Program::VirtCall(int64&)
  IL_0038:  box        [mscorlib]System.TimeSpan
  IL_003d:  call       void [mscorlib]System.Console::WriteLine(string,
                                                                object)

...
Рейтинг: 0 / 0
Инициализация статического класса
    #39811999
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, показалось с непросыпу
Дебажная сборка тоже самое распределение
Not static: 00:00:02.1452922
Virtual: 00:00:02.2355484
Interface Call: 00:00:01.3028084
Static: 00:00:01.5658457
NNNs - 502500001, 0
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812000
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, вчера, 17:28 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312102&msg=21882180][21882180]
>е***ь мозг всякими лаунчерами
<Интересно, чем же тебя так достал пускач. У меня инфосистема реализуется многими приложениями, а к ним надо иметь доступ, их надо запускать, надо смотреть за их изменениями. Этим и занимается лаунчар. Что здесь плохого - то?
...
Рейтинг: 0 / 0
Инициализация статического класса
    #39812012
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebPrjИменно это и нужно программисту при статик.
Освобождение памяти при завершении процесса.
А серверных приложений у нас не бывает вообще? Или ты уроки, где про них рассказывали, прогулял? :))
...
Рейтинг: 0 / 0
25 сообщений из 279, страница 8 из 12
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Инициализация статического класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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