Инициализаци переменных (Когда и Как) [C#]
От: Аноним  
Дата: 24.01.07 15:05
Оценка:
eisernWolf:
>>Интересно ктонибудь догадается какой способ лучше и почему . Второй разумеется, ибо удобнее и гибче. . P.S. Я даже готов согласиться, что лучше первый... если ты мне предоставишь диаграммы производительности и обоснуешь результат
я не выдержал и решил проверить сам
using System;
using System.Diagnostics;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //Тесты надо запускать с перезапуском программы
            test1();  //~283
            //test2();  //~450

            Console.ReadLine();
        }

        static int count = 10000000;

        static void test1()
        {
            Stopwatch sw = Stopwatch.StartNew();
            MyClass1 m;

            for (int i = 0; i < count; ++i)
            {
                m = new MyClass1();
            }

            sw.Stop();

            Console.WriteLine(sw.ElapsedMilliseconds);
        }

        static void test2()
        {
            Stopwatch sw = Stopwatch.StartNew();
            MyClass2 m;

            for (int i = 0; i < count; ++i)
            {
                m = new MyClass2();
            }

            sw.Stop();

            Console.WriteLine(sw.ElapsedMilliseconds);
        }

        public class MyClass1
        { 
            public MyClass1() : this("DefaultValue1", "DefaultValue2", "DefaultValue3") 
            { 
            } 
            
            public MyClass1(string str1) : this(str1, "DefaultValue2", "DefaultValue3") 
            { 
            } 

            public MyClass1(string str1, string str2) : this(str1, str2, "DefaultValue3") 
            { 
            } 
            
            public MyClass1(string str1, string str2, string str3) 
            { 
                this.str1 = str1; 
                this.str2 = str2; 
                this.str3 = str3; 
            } 
            
            string str1; 
            string str2; 
            string str3;    
        }
    
        public class MyClass2    
        {        
            public MyClass2(): this("DefaultValue1")        
            {
            }        
            
            public MyClass2(string str1): this(str1, "DefaultValue2")        
            {       
            }    
    
            public MyClass2(string str1, string str2): this(str1, str2, "DefaultValue3") 
            {       
            }       
            
            public MyClass2(string str1, string str2, string str3)        
            {           
                this.str1 = str1;   
                this.str2 = str2;            
                this.str3 = str3;        
            }        
            
            string str1;    
            string str2;      
            string str3;  
        }

    }
}




почти в двое больше и это при четырех конструкторах!
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4, 5}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Инициализаци переменных (Когда и Как) [C#]
От: Аноним  
Дата: 24.01.07 15:21
Оценка:
        static void test3()
        {
            Stopwatch sw = Stopwatch.StartNew();
            MyClass3 m;

            for (int i = 0; i < count; ++i)
            {
                m = new MyClass3();
            }

            sw.Stop();

            Console.WriteLine(sw.ElapsedMilliseconds);
        }[c#]
public class MyClass3
{
public MyClass3(): this("DefaultValue1")
{
}

public MyClass3(string str1): this(str1, "DefaultValue2")
{
}

public MyClass3(string str1, string str2): this(str1, str2, "DefaultValue3")
{
}

public MyClass3(string str1, string str2, string str3)
{
this.str1 = str1;
this.str2 = str2;
this.str3 = str3;
}

string str1 = "";
string str2 = "";
string str3 = "";
}[/c#]


тест с использованием инициализаций вне конструкторов ~510 еще больше
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4, 5}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Инициализаци переменных (Когда и Как) [C#]
От: Аноним  
Дата: 24.01.07 17:51
Оценка:
To Nimnul: Я примерно такого результата и ждал, только не в таком гипертрофированном формате 10.000.000 объектов... Ну-ну. А теперь уменьши это число до более реальных 10 штук, нет, лучше 10.000 штук... Ну чтобы более правдоподобно было И сравни результаты. 0 = 0 не так ли? Какой мне смысл на спичках экономить? Буду использовать то, что удобнее и проще. .NET для этого и разрабатывался. Разницу в 2 мс на 100.000 объектов мои клиенты не оценят

P.S. А меня всегда в тебе удивляло, почему ты не на плюсах пишешь? Ведь софт сишный куда как быстрее работает...

Две капли морфия облегчат тебе жизнь.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: Инициализаци переменных (Когда и Как) [C#]
От: Аноним  
Дата: 24.01.07 19:44
Оценка:
]]Ведь софт сишный куда как быстрее работает

Я не выдержал и решил проверить сам

#include "stdafx.h"

class MyClass1
{
private : char *_str1;
private : char *_str2;
private : char *_str3;

private : void Init(char *str1, char *str2, char *str3)
          {
              _str1 = str1;
              _str2 = str2;
              _str3 = str3;
          }

public : MyClass1()
         {
             this-]Init("DefaultValue1", "DefaultValue2", "DefaultValue3");
         }
};

#define COUNT 10000000

void testStack()
{
    clock_t start = clock();

    for (int i = 0; i < COUNT; i++)
    {
        MyClass1 m();
    }

    clock_t end = clock();
}

void testHeap()
{
    MyClass1 *m = NULL;

    for (int i = 0; i < COUNT; i++)
    {
        m = new MyClass1();
        delete m;
    }
}

int main()
{    
    clock_t start = clock();
    testStack();
    clock_t end = clock();
    printf("Elapsed: %d ms\n", end - start);

    start = clock();
    testHeap();
    end = clock();
    printf("Elapsed: %d ms\n", end - start);

    system("pause");
    return 0;
}

Две капли морфия облегчат тебе жизнь.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Инициализаци переменных (Когда и Как) [C#]
От: Аноним  
Дата: 25.01.07 01:16
Оценка:
eisernWolf:
To Nimnul: Я примерно такого результата и ждал, только не в таком гипертрофированном формате 10.000.000 объектов... Ну-ну. А теперь уменьши это число до более реальных 10 штук, нет, лучше 10.000 штук... Ну чтобы более правдоподобно было И сравни результаты. 0 = 0 не так ли? Какой мне смысл на спичках экономить? Буду использовать то, что удобнее и проще. .NET для этого и разрабатывался. Разницу в 2 мс на 100.000 объектов мои клиенты не оценят P.S. А меня всегда в тебе удивляло, почему ты не на плюсах пишешь? Ведь софт сишный куда как быстрее работает...
А теперь добавь в тест еще три конструктора, и с десяток полей класса. Где ты видел классы с тремя полями?
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4, 5}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: Инициализаци переменных (Когда и Как) [C#]
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.02.07 23:03
Оценка: +1
Здравствуйте, Nimnul, Вы писали:

N>а "" по одному на каждый домен как минимум, и на весь процесс как максимум.

N> Более того сравнение со String.Empty как минимум втрое медленее чем с "", ваши знания очень поверхностны молодой человек

А, вот и клоун появился. Снова решил GDN попозорить.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.