С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для lover
6 / 6 / 1
Регистрация: 17.11.2009
Сообщений: 91

Оптимизация работы с коллекцией классов

26.07.2012, 17:15. Показов 1376. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем дня!
Имеется коллекция классов, в каждом классе около 20 переменных, коллекция довольно большая(>50000), так вот что будет оптимальнее по ресурсам и по времени, перезапись всего объекта или же изменение только откорректированных пременных класса?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.07.2012, 17:15
Ответы с готовыми решениями:

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

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

Оптимизация передачи классов и методов и их обработки в разных модулях
Доброго времени суток. Работаю над сложной программой, позволяющей считать таблицу Excel вида "номер-коордХ-коордY-вид...

10
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
26.07.2012, 19:21
Коллекция классов или объектов? Не пугайте народ - даже в самом .NET Framework по-моему столько классов не наберется. )))
0
 Аватар для lover
6 / 6 / 1
Регистрация: 17.11.2009
Сообщений: 91
26.07.2012, 19:43  [ТС]
Объектов класса) описался))
0
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
26.07.2012, 19:54
Лучше конечно только изменившиеся объекты перезаписывать. Вы же имеете в виду сохранение изменений в базу данных? Или что-то другое?
0
 Аватар для lover
6 / 6 / 1
Регистрация: 17.11.2009
Сообщений: 91
26.07.2012, 20:09  [ТС]
можно сказать и так, у меня коллекция заполняется из файла, потом я с ней работаю, ну и соответственно потом обратно в файл записываю
0
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
26.07.2012, 20:12
Ого! А в каком формате данные в файле хранятся? И сколько времени уходит на считывание из файла 50000 объектов?
0
 Аватар для lover
6 / 6 / 1
Регистрация: 17.11.2009
Сообщений: 91
26.07.2012, 20:22  [ТС]
В бинарике или xml, но там не всегда так много, количество варьируется)) мне вот просто интересно стало как лучше сделать) тут как получается два варианта, первый это удалить старый, добавить новый объект, второй вариант
это изменить имеющийся, я все таки склоняюсь ко второму потому что че лишний раз менять одинаковые данные
0
87 / 73 / 6
Регистрация: 11.09.2011
Сообщений: 118
26.07.2012, 20:44
Провел небольшой тест. Вот код:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Diagnostics;
 
internal class Program
{
    private static void Main(string[] args)
    {
        const int VALUE1 = 9999, VALUE2 = 8888, VALUE3 = 7777;
        List<A> collection1 = new List<A>(), collection2 = new List<A>(), collection3 = new List<A>();
        for (int i = 0; i < 50000; i++)
        {
            Random r = new Random(Guid.NewGuid().GetHashCode());
            A item = new A();
            item.Value1 = r.Next(9999);
            item.Value2 = r.Next(8888);
            item.Value3 = r.Next(7777);
            collection1.Add(item);
            collection2.Add(item);
            collection3.Add(item);
        }
        Stopwatch sw = new Stopwatch();
        sw.Start();
        for (int i = 0; i < collection1.Count; i++)
        {
            A extracted = collection1[i];
            extracted.Value1 = VALUE1;
            extracted.Value2 = VALUE2;
            extracted.Value3 = VALUE3;
            collection1[i] = extracted;
        }
        sw.Stop();
        Console.WriteLine("Перезапись объектов списка: " + sw.Elapsed.TotalMilliseconds + "ms");
        sw.Reset();
        sw.Start();
        for (int i = 0; i < collection2.Count; i++)
        {
            collection2[i].Value1 = VALUE1;
            collection2[i].Value2 = VALUE2;
            collection2[i].Value3 = VALUE3;
        }
        sw.Stop();
        Console.WriteLine("Изменение свойств объектов списка: " + sw.Elapsed.TotalMilliseconds + "ms");
        sw.Reset();
        sw.Start();
        for (int i = 0; i < collection3.Count; i++)
        {
            A extracted = collection3[i];
            extracted.Value1 = VALUE1;
            extracted.Value2 = VALUE2;
            extracted.Value3 = VALUE3;
            collection3.RemoveAt(i);
            collection3.Insert(i, extracted);
        }
        sw.Stop();
        Console.WriteLine("Удаление и добавление объектов списка: " + sw.Elapsed.TotalMilliseconds + "ms");
        Console.ReadKey();
    }
}
 
internal class A
{
    private int value1;
 
    public int Value1
    {
        get { return value1; }
        set { value1 = value; }
    }
 
    private int value2;
 
    public int Value2
    {
        get { return value2; }
        set { value2 = value; }
    }
 
    private int value3;
 
    public int Value3
    {
        get { return value3; }
        set { value3 = value; }
    }
 
    public A() { }
}
Результаты можно посмотреть на скрине. Таким образом, быстрее всего будет менять свойства объектов, а не перезаписывать сами объекты.
1
 Аватар для lover
6 / 6 / 1
Регистрация: 17.11.2009
Сообщений: 91
26.07.2012, 20:51  [ТС]
Ого, спасибо за исчерпывающий ответ)))))

Добавлено через 1 минуту
Интересно что удаление и вставка так долго проходят
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
27.07.2012, 13:38
Цитата Сообщение от lover Посмотреть сообщение
Интересно что удаление и вставка так долго проходят
List основан на массиве, соответственно при удалении, приходится двигать все элементы, находящиеся дальше удаляемого.

Чтобы никто не вошел в заблуждение, по поводу того, что Перезапись объектов списка быстрее Изменения свойств объектов списка приведу модифицированный тест, с увеличенным количеством property.
тест
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.Diagnostics;
 
internal class Program
{
    private static void Main(string[] args)
    {
        const int VALUE1 = 9999, VALUE2 = 8888, VALUE3 = 7777;
        const long VALUE4 = 234324, VALUE5 = 2342352345, VALUE6 = 45345345;
        List<A> collection1 = new List<A>(), collection2 = new List<A>(), collection3 = new List<A>();
        for (int i = 0; i < 50000; i++)
        {
            Random r = new Random(Guid.NewGuid().GetHashCode());
            A item = new A();
            item.Value1 = r.Next(9999);
            item.Value2 = r.Next(8888);
            item.Value3 = r.Next(7777);
            collection1.Add(item);
            collection2.Add(item);
            collection3.Add(item);
        }
        Stopwatch sw = new Stopwatch();
        sw.Start();
        for (int i = 0; i < collection1.Count; i++)
        {
            A extracted = collection1[i];
            extracted.Value1 = VALUE1;
            extracted.Value2 = VALUE2;
            extracted.Value3 = VALUE3;
            extracted.Value4 = VALUE4;
            extracted.Value5 = VALUE5;
            extracted.Value6 = VALUE6;
            collection1[i] = extracted;
        }
        sw.Stop();
        Console.WriteLine("Перезапись объектов списка: " + sw.Elapsed.TotalMilliseconds + "ms");
        sw.Reset();
        sw.Start();
        for (int i = 0; i < collection2.Count; i++)
        {
            collection2[i].Value1 = VALUE1;
            collection2[i].Value2 = VALUE2;
            collection2[i].Value3 = VALUE3;
            collection2[i].Value4 = VALUE4;
            collection2[i].Value5 = VALUE5;
            collection2[i].Value6 = VALUE6;
        }
        sw.Stop();
        Console.WriteLine("Изменение свойств объектов списка: " + sw.Elapsed.TotalMilliseconds + "ms");
        Console.ReadKey();
    }
}
 
internal class A
{
    private int value1;
 
    public int Value1
    {
        get { return value1; }
        set { value1 = value; }
    }
 
    private int value2;
 
    public int Value2
    {
        get { return value2; }
        set { value2 = value; }
    }
 
    private int value3;
 
    public int Value3
    {
        get { return value3; }
        set { value3 = value; }
    }
 
    private long value4;
    public long Value4
    {
        get { return value4; }
        set { value4 = value; }
    }
 
    private long value5;
    public long Value5
    {
        get { return value5; }
        set { value5 = value; }
    }
 
    private long value6;
    public long Value6
    {
        get { return value6; }
        set { value6 = value; }
    }
}
Миниатюры
Оптимизация работы с коллекцией классов  
1
27.07.2012, 13:43

Не по теме:

Цитата Сообщение от lover Посмотреть сообщение
Интересно что удаление и вставка так долго проходят
use LinkedList, Luke

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.07.2012, 13:43
Помогаю со студенческими работами здесь

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

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

Оптимизация Работы С Тз
Есть две ТЗ с одинаковыми колонками: Товар, Цена, День, НачО, КонО, Приход, Расход Если в ТЗ1 и в ТЗ2 есть строки с совпадающими...

Оптимизация работы с ТЗ
Есть две ТЗ Они, можно сказать, связаны один-к-многим При формировании печатной формы идет перебор строк ТЗ1 и для каждой ее строки...

Оптимизация работы с БД
Прошло 5 недель, как я перешёл на веб-разработку. У меня много вопросов касающихся оптимизации. Самый главный вопрос, который сейчас меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru