Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конструктор типа 
:(
    Опции темы
DenWPF
Дата 16.4.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



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

Хотя наверное нужно дописать инициализацию поля до обращения к нему. - Как это сделать?

Из Рихтер clr in C# 2.0 (Производительность конструкторов типа)


Цитата

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



Код

    // С# отмечает определение типа в метаданных ключевым словом BeforeFieldlnit. 
    internal sealed class BeforeFieldlnit
    {
        public static Int32 s_x = 123;
    }
    // Так как в этом классе конструктор типа задан явно, 
    // С# не отмечает определение типа в метаданных ключевым словом BeforeFieldlnit. 
    internal sealed class Precise
    {
        public static Int32 s_x;
        static Precise() { s_x = 123; }
    }
    public sealed class Program
    {

        static void Main(string[] args)
        {
            const Int32 iterations = 1000 * 1000 * 1000;
            PerfTesti(iterations);
            PerfTest2(iterations);

        }
        private static void PerfTesti(Int32 iterations)
        {
            Stopwatch sw = Stopwatch.StartNew();
            for (Int32 x = 0; x < iterations; x++)
            {
                // JIT-компилятор создает код вызова конструктора типа BeforeFieldlnit, 
                // чтобы он выполнился до начала цикла. 
                BeforeFieldlnit.s_x = 1;
            }
            Console.WriteLine("PerfTesti: {0} BeforeFieldlnit", sw.Elapsed);

            sw = Stopwatch.StartNew();
            for (Int32 x = 0; x < iterations; x++)
            {
                // ЛТ-компилятор создает код вызова конструктора типа Precise, 
                // чтобы тот проверил, нужно ли вызывать конструктор 
                // в каждом цикле. 
                Precise.s_x = 1;
            }
            Console.WriteLine("PerfTest1: {0} Precise", sw.Elapsed);
        }
        // При ЛТ-компиляции этого метода, конструкторы типов 
        // для классов BeforeFieldlnit и Precise уже завершили работу, 
        // поэтому вызовы этих конструкторов НЕ ВСТРАИВАЮТСЯ 
        // в код метода, из-за чего он исполняется быстрее. 
        private static void PerfTest2(Int32 iterations)
        {
            Stopwatch sw = Stopwatch.StartNew();
            for (Int32 x = 0; x < iterations; x++)
            {
                BeforeFieldlnit.s_x = 1;
            }
            Console.WriteLine("PerfTest2: {0} BeforeFieldlnit", sw.Elapsed);
            sw = Stopwatch.StartNew();
            for (Int32 x = 0; x < iterations; x++)
            {
                Precise.s_x = 1;
            }

            Console.WriteLine("PerfTest2: {0} Precise", sw.Elapsed);
        }

    }


Результат в книге:
Цитата

PerfTesti: 00:00:02.1997770 BeforeFieldlnit 
PerfTesti: 00:00:07.6188948 Precise 
PerfTest2: 00:00:02.0843565 BeforeFieldlnit 
PerfTest2: 00:00:02.0843732 Precise 


PM MAIL   Вверх
Rohoss
Дата 16.4.2011, 13:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



DenWPF, ты бы написал что тебе нужно  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
DenWPF
Дата 16.4.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



ну что бы производительность улучшилась как говориться в книге...
PM MAIL   Вверх
Voyager
Дата 16.4.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Улучшилось по сравнению с чем?
На практике в большинстве случаев ощутимого результата производительности вы не заметите.
PM   Вверх
DenWPF
Дата 16.4.2011, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



PerfTest2, должен по теории и по данным из книги работать быстрей, у меня такого нет. 
 
PM MAIL   Вверх
Voyager
Дата 17.4.2011, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



У меня PerfTesti видится абсолютно одинаковым с PerfTest2, а у вас как?
PM   Вверх
DenWPF
Дата 17.4.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Цитата(Voyager @ 17.4.2011,  20:12)
У меня PerfTesti видится абсолютно одинаковым с PerfTest2, а у вас как?

вот, я же об этом...
в книге написано что нужно в начале инициализировать перед вызовом...или что то в этом роде...

я же говорю прямо как в книге, вот и спрашиваю что не так.
PM MAIL   Вверх
Voyager
Дата 18.4.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Приложите информацию из книги (скриншот, ссылку на страницу и т.д., оригинал), а то разговор непредметным получается.
PM   Вверх
DenWPF
Дата 18.4.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Я уже писал.  Rihter clr in C# 2.0 page 182
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.