Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 12   вперед  Ctrl      все
 Re: Инициализация статического класса  [new]
Изопропил
Member

Откуда:
Сообщений: 31156
love_bach
но, есть же случаи, когда у кого-то, когда это не подходит :)

причины неиспользования срорее другие
8 май 19, 18:35    [21881398]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
WebPrj
Member [заблокирован]

Откуда:
Сообщений: 376
love_bach
короче, я против статиков, я за IoC, но, есть же случаи, когда у кого-то, когда это не подходит :)

А как вы напишете это:
// mathematical.hpp
 
namespace Constants
{
  inline constexpr double pi{ 3.14159 };
  inline constexpr double avogadro{ 6.0221413e23 };
  inline constexpr double my_gravity{ 9.2 };
}
8 май 19, 18:51    [21881406]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
love_bach
Member

Откуда:
Сообщений: 496
WebPrj
love_bach
короче, я против статиков, я за IoC, но, есть же случаи, когда у кого-то, когда это не подходит :)

А как вы напишете это:
// mathematical.hpp
 
namespace Constants
{
  inline constexpr double pi{ 3.14159 };
  inline constexpr double avogadro{ 6.0221413e23 };
  inline constexpr double my_gravity{ 9.2 };
}


скорее всего не на C#
8 май 19, 19:24    [21881420]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4891
fkthat
А сallvirt ничего не означает - он используется для вызова любого инстанс-метода, хоть виртуального, хоть нет.

Кстати, нет. Вызов прямо на результате конструктора приводит к использованию call вместо callvirt:
using System;
namespace test2
{
  class Program
  {
    public static void Main(string[] args)
    {
      new Program().Foo();
    }
    public void Foo() => Console.WriteLine("done");
  }
}

.method public hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Размер кода:       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  newobj     instance void test2.Program::.ctor()
  IL_0006:  call       instance void test2.Program::Foo()
  IL_000b:  nop
  IL_000c:  ret
} // end of method Program::Main

Оппонент просто какбы намекает, что если вдруг с какого-то мегаперепоя корвалолом все инстанстные вызовы заменятся на статики, то будет массовая замена вызовов callvirt на call. Цена замены - несколько тиков. В масштабах страны, сами понимаете результат.
8 май 19, 19:37    [21881429]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
love_bach
fkthat
пропущено...

Первый же запрос к i/o (БД, хттп, файловая система) накроет все дополнительные расходы на виртуальные вызовы, DI и подобное, как бык овцу.


ну, есть же поддержка async в проваедерах БД, хттп...

Асинк как-то ускорит выполнение самого запроса?
8 май 19, 19:38    [21881430]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 1793
fkthat
love_bach
пропущено...


ну, есть же поддержка async в проваедерах БД, хттп...

Асинк как-то ускорит выполнение самого запроса?
Не, только если на Go переписать :)
8 май 19, 19:39    [21881431]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Ололо, оптимизаторы тактов вызова метода. Объясняйте мне тогда вот это:
    internal class Program
    {
        private static void Static()
        {
        }

        private static void Main(string[] args)
        {
            var prog = new Program();
            var n = 100500000;
            Console.WriteLine("Static:     {0}", Measure(() => Repeat(n, Static)));
            Console.WriteLine("Not static: {0}", Measure(() => Repeat(n, prog.NotStatic)));
        }

        private static void Repeat(int n, Action action)
        {
            for (var i = 0; i < n; i++)
            {
                action();
            }
        }

        private static TimeSpan Measure(Action action)
        {
            var sw = new Stopwatch();
            sw.Start();
            action();
            sw.Stop();
            return sw.Elapsed;
        }

        private void NotStatic()
        {
        }
    }


Static:     00:00:00.5190127
Not static: 00:00:00.4082426


И так не на одном запуске, а раз за разом. Нестатический метод вызывается быстрее чем статический. Причем и в дебажной и релизной сборке. Честно говоря, для меня это тоже полный сюрприз.
8 май 19, 20:01    [21881446]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Добавим жару.

        public virtual void Virtual()
        {
        }


Static:     00:00:00.3154586
Not static: 00:00:00.2473785
Virtual:    00:00:00.2532572


Даже виртуальный метод имеет статика в хвост и гриву
8 май 19, 20:06    [21881455]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4891
fkthat
Объясняйте мне тогда вот это

Зачем? Мне это вообще по барабану. Моя деятельность оценивается несколько по-другому.
8 май 19, 20:08    [21881458]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
WebPrj
Member [заблокирован]

Откуда:
Сообщений: 376
love_bach
WebPrj
пропущено...

А как вы напишете это:
// mathematical.hpp
 
namespace Constants
{
  inline constexpr double pi{ 3.14159 };
  inline constexpr double avogadro{ 6.0221413e23 };
  inline constexpr double my_gravity{ 9.2 };
}


скорее всего не на C#

А я думал
static class Constants
{
8 май 19, 20:09    [21881459]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
И даже так

    internal interface IProgram
    {
        void Interface();
    }

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


Static:     00:00:00.3932091
Not static: 00:00:00.2832406
Virtual:    00:00:00.2452205
Interface:  00:00:00.2511343


Статик самый медленный. Причем, что интересно, что вызовы виртуального метода и метода интерфейса быстрее чем обычного.
8 май 19, 20:14    [21881466]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Сон Веры Павловны
fkthat
Объясняйте мне тогда вот это

Зачем? Мне это вообще по барабану. Моя деятельность оценивается несколько по-другому.

Ну тогда можешь скипать. Просто тут был пассажир, который объяснял что статик метод лучше, потому что его вызов быстрее. Даже какой-то машинный код тут в доказательство писал.
8 май 19, 20:15    [21881468]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
ViPRos
Member

Откуда:
Сообщений: 9545
Дмитрий Мух
fkthat
пропущено...

Асинк как-то ускорит выполнение самого запроса?
Не, только если на Go переписать :)

а чем там то он поможет
у го свои тараканы
все издали кажется красиво
8 май 19, 20:18    [21881470]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
WebPrj
А я думал
static class Constants
{


public interface IMathConstant {
    double Value {get;}
}

public class PIMathConstants: IMathConstants {
   public double Value => 3.14159;
}

public class GravyMathConstant: IMathConstant {
   public double Value => 9.8;
}

public interface IMathConstantLocator {
   IMathConstant Get(string name);
}

public class MathConstantLocator: IMathConstantLocator {
   privat IComponentContext _ctx;
   public MathConstantLocator(IComponentContext ctx) { _ctx = ctx; }
   public IMathConstant Get(string name) => _ctx.ResolveNamed(name);
}

containerBuilder.RegisterType<PIMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<GravyMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<MathConstantLocator>().As<IMathConstantLocator>();
8 май 19, 20:31    [21881473]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4891
Вундербар
fkthat
WebPrj
А я думал
static class Constants
{


public interface IMathConstant {
    double Value {get;}
}

public class PIMathConstants: IMathConstants {
   public double Value => 3.14159;
}

public class GravyMathConstant: IMathConstant {
   public double Value => 9.8;
}

public interface IMathConstantLocator {
   IMathConstant Get(string name);
}

public class MathConstantLocator: IMathConstantLocator {
   privat IComponentContext _ctx;
   public MathConstantLocator(IComponentContext ctx) { _ctx = ctx; }
   public IMathConstant Get(string name) => _ctx.ResolveNamed(name);
}

containerBuilder.RegisterType<PIMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<GravyMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<MathConstantLocator>().As<IMathConstantLocator>();

Главное, в процессе создания такой нетленки не забыть вот про [url=Вундербар
fkthat
WebPrj
А я думал
static class Constants
{


public interface IMathConstant {
    double Value {get;}
}

public class PIMathConstants: IMathConstants {
   public double Value => 3.14159;
}

public class GravyMathConstant: IMathConstant {
   public double Value => 9.8;
}

public interface IMathConstantLocator {
   IMathConstant Get(string name);
}

public class MathConstantLocator: IMathConstantLocator {
   privat IComponentContext _ctx;
   public MathConstantLocator(IComponentContext ctx) { _ctx = ctx; }
   public IMathConstant Get(string name) => _ctx.ResolveNamed(name);
}

containerBuilder.RegisterType<PIMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<GravyMathConstants>().As<IMathConstants>().SingleInstance();
containerBuilder.RegisterType<MathConstantLocator>().As<IMathConstantLocator>();

Главное, в процессе создания такой нетленки не забыть вот про это.
8 май 19, 21:29    [21881504]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Сон Веры Павловны

Ну ты не сравнивай "Hello factorial" и приложения, которые по десятку лет пишут, развивают и дорабатывают. Я бы мог кучу преимуществ своего примера кода привести над твоим static Consts, но, судя по твоей ссылке у тебя представление о разработке как раз такими "Hello factorial" и ограничивается, т.ч. тебе это все равно будет без пользы.
8 май 19, 21:43    [21881510]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
love_bach
Member

Откуда:
Сообщений: 496
кто победил, потом отпишитесь
8 май 19, 22:59    [21881550]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
love_bach
Member

Откуда:
Сообщений: 496
fkthat
Сон Веры Павловны

Ну ты не сравнивай "Hello factorial" и приложения, которые по десятку лет пишут, развивают и дорабатывают. Я бы мог кучу преимуществ своего примера кода привести над твоим static Consts, но, судя по твоей ссылке у тебя представление о разработке как раз такими "Hello factorial" и ограничивается, т.ч. тебе это все равно будет без пользы.


чо то ты запизделси
8 май 19, 23:02    [21881552]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
love_bach
чо то ты запизделси

Иди себе с миром писать еще один факториал на статиках :))
8 май 19, 23:41    [21881559]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
iskatelsql
Member

Откуда:
Сообщений: 785
Да блин, задал я вопросик... Семь страниц. одного заблокировали... Я вас уже что-то боюсь.
9 май 19, 00:13    [21881566]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4418
iskatelsql
Да блин, задал я вопросик... Семь страниц. одного заблокировали... Я вас уже что-то боюсь.

не бойся... это от хорошой жизни, ну и с возрастом... на словоблудие тянет
9 май 19, 00:35    [21881575]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
WebPrj
Member [заблокирован]

Откуда:
Сообщений: 376
buser,
С возрастом на максимализм и нравоучения тянет))
Это нельзя, этому лоботомию, этот с***а, тут я бы уволился и т.д.
9 май 19, 09:13    [21881635]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72747
fkthat
Antonariy
Глупость, написанная капсом, умностью не становится.


Antonariy
Но я-то умнее


Кажется, ты что-то осмысленное хотел написать, но хватило лишь на смайлик.
А впрочем, правильный подход. Смайликами очередную глупость не ляпнешь.
9 май 19, 12:40    [21881683]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Antonariy
Кажется, ты что-то осмысленное хотел написать, но хватило лишь на смайлик.
А впрочем, правильный подход. Смайликами очередную глупость не ляпнешь.


Да я и не спорю. Тут один ты у нас умный. Даже сам об этом написал.

Antonariy
Но я-то умнее


Забыл, наверное, дописать "всех".
9 май 19, 14:08    [21881723]     Ответить | Цитировать Сообщить модератору
 Re: Инициализация статического класса  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72747
fkthat
Antonariy
Кажется, ты что-то осмысленное хотел написать, но хватило лишь на смайлик.
А впрочем, правильный подход. Смайликами очередную глупость не ляпнешь.


Да я и не спорю. Тут один ты у нас умный. Даже сам об этом написал.

Antonariy
Но я-то умнее


Забыл, наверное, дописать "всех".
Ну вот, перешел на буквы, и опять облажался, аж дважды. Вернись к смайликам, не позорься. Ну или к коду, к нему тоже претензий нет.
9 май 19, 17:49    [21881824]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 12   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить