Какой массив расходует наименьшее количество памяти?
От: basis  
Дата: 29.12.04 08:07
Оценка:
Нужно из базы данных передать большой массив данных в слой бизнес логики. Далее маcсив нужно только проенумерейтить. Дата сет не подходит, т.к. елементы массива должны иметь тип
public class MyClass
{
    string field1;
    string[] field2;
}


Какой массив в .Net Framework расходует наименьшее количество памяти? На сколько я понимаю, нужно выбирать из ArrayList и MyType[]. Кто нибудь знает сколько расходует ArrayList из N Object и сколько Object[N] (размер Object'а для простоты опустим)?
Re: Какой массив расходует наименьшее количество памяти?
От: TK Лес кывт.рф
Дата: 29.12.04 09:03
Оценка:
Hello, "basis"

> Какой массив в .Net Framework расходует наименьшее количество памяти? На сколько я понимаю, нужно выбирать из ArrayList и MyType[]. Кто нибудь знает сколько расходует ArrayList из N Object и сколько Object[N] (размер Object'а для простоты опустим)?


Меньше всего будет расходовать массив структур (MyType[]). Для удобства работы можно взять CodeSmith который умеет генерировать типизированные версии будет аналог (ArrayList для структуры).
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Какой массив расходует наименьшее количество памяти?
От: Аноним  
Дата: 29.12.04 09:12
Оценка:
ArrayList расходовать будет всегда больше памяти.. пусть даже на несколько байт. В действительности он внутри себя хранит массив object[Capacity] элементов. Что как правило больше его Count, если вы конечно не подогнали его потом. Если вы не планируете изменять количество элеентов в массиве то не дурите себе голову — используйте простой массив — будет меньше приведений типов.
Deny everything...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Какой массив расходует наименьшее количество памяти?
От: basis  
Дата: 29.12.04 09:19
Оценка:
Здравствуйте, TK, Вы писали:

TK>Меньше всего будет расходовать массив структур (MyType[]). Для удобства работы можно взять CodeSmith который умеет генерировать типизированные версии будет аналог (ArrayList для структуры).


Про массив структур и CodeSmith понял, используя структуры я сэкономлю по 4 байта на каждом элементе, правильно?. Хотел еще задать вопрос про отличия ArrayList и MyType[], но уже Virus Quartirus ответил .
Re: Какой массив расходует наименьшее количество памяти?
От: basis  
Дата: 29.12.04 09:32
Оценка:
Здравствуйте, Virus Quartirus, Вы писали:

А>Если вы не планируете изменять количество элеентов в массиве то не дурите себе голову — используйте простой массив — будет меньше приведений типов.


В слое бизнес логики размер массива менять, конечно не будут. Но мне для того, что бы заранее знать размер массива, придется лишний раз сходить к БД. Оправдан ли будет лишний запрос БД, или лучше сгенерировать типизированный аналог ArrayList? Есть еще вариант: во время вычитывания данных класть их в ArrayList, а потом вызывать ArrayList.ToArray(typeof(MyType)). Но это как я понимаю самый нехороший вариант, ибо нельзя использовать структуры, что бы избежать boxing, unboxing, и само копирование на ToArray может сказаться на производительности.
Re: Какой массив расходует наименьшее количество памяти?
От: coala Россия www.inreco.ru
Дата: 29.12.04 09:51
Оценка:
Здравствуйте, basis.
Если не требуется доступ по индексу, то наиболее оптимальным будет связанный список, в .NET 2.0 есть класс List
Re[2]: Какой массив расходует наименьшее количество памяти?
От: Сантехник Беларусь  
Дата: 29.12.04 10:23
Оценка:
Здравствуйте, coala, Вы писали:

C>Здравствуйте, basis.

C>Если не требуется доступ по индексу, то наиболее оптимальным будет связанный список, в .NET 2.0 есть класс List

LinkedList<T>

List<T> — это не связный список, это генериковый аналог ArrayList.
... << RSDN@Home 1.1.4 beta 3 rev. 264>>
Re[2]: Какой массив расходует наименьшее количество памяти?
От: basis  
Дата: 29.12.04 10:52
Оценка:
Здравствуйте, coala, Вы писали:

C>Здравствуйте, basis.

C>Если не требуется доступ по индексу, то наиболее оптимальным будет связанный список, в .NET 2.0 есть класс List

Изначально вопрос был про Framework 1.*. Но ради интереса хочется узнать, почему связанный список оптимальнее? Ведь для реализации связанного списка длинной N нужно хранить N ссылок на следующий элемент, что для реализации массива не требуется.
Re: Какой массив расходует наименьшее количество памяти?
От: Аноним  
Дата: 29.12.04 14:58
Оценка:
Не очень ясно каким образом вы получаете эти данные для заполнения массива и почему неизвестно их кличество? У ArrayList есть еще один побочный эффект: при добавлении в него элементов если их Count начинает превышать Capacity, то происходит перевыделение нового внутреннего массива только уже большего объема, так что будте осторожны, может статься что быстрее было бы лишний раз к базе обратиться..
Deny everything...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Какой массив расходует наименьшее количество памяти?
От: basis  
Дата: 29.12.04 15:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не очень ясно каким образом вы получаете эти данные для заполнения массива и почему неизвестно их кличество?

Дык OracleDataReader'ом вычитываю.

А>У ArrayList есть еще один побочный эффект: при добавлении в него элементов если их Count начинает превышать Capacity, то происходит перевыделение нового внутреннего массива только уже большего объема, так что будте осторожны, может статься что быстрее было бы лишний раз к базе обратиться..

Спасибо, учту.
Re[2]: Какой массив расходует наименьшее количество памяти?
От: Аноним  
Дата: 29.12.04 15:56
Оценка:
а у него случайно нету такого свойства как RecordsAffected?..
Deny everything...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Какой массив расходует наименьшее количество памяти?
От: basis  
Дата: 29.12.04 16:16
Оценка:
Здравствуйте, Virus Quartirus, Вы писали:

VQ>а у него случайно нету такого свойства как RecordsAffected?..


А оно для SELECT statements не работает. Я так понимаю это потому, что кода вызывается OracleCommand.ExecuteReader с SELECT statement, данные из БД на сторону клиента еще не попали, а поступают по мере вычитывания данных с помощью OracleDataReader.Read().
Re[2]: Какой массив расходует наименьшее количество памяти?
От: Silver_s Ниоткуда  
Дата: 29.12.04 16:32
Оценка:
Здравствуйте, basis, Вы писали:

B> Есть еще вариант: во время вычитывания данных класть их в ArrayList, а потом вызывать ArrayList.ToArray(typeof(MyType)). Но это как я понимаю самый нехороший вариант, ибо нельзя использовать структуры, что бы избежать boxing, unboxing, и само копирование на ToArray может сказаться на производительности.


Да не может это сказаться на производительности ArrayList.ToArray(typeof(MyType)), если эти строки вычитываются из базы, в какие-то хеш-таблицы внутренние вбиваются (внутри CLR), бессмыслено париться о массиве указателей на строки, 0.1% сэкономим, а смысл где? Я так понял строки в структурах?
Re[3]: Какой массив расходует наименьшее количество памяти?
От: basis  
Дата: 29.12.04 17:43
Оценка:
Здравствуйте, Silver_s, Вы писали:

S_>Да не может это сказаться на производительности ArrayList.ToArray(typeof(MyType)), если эти строки вычитываются из базы, в какие-то хеш-таблицы внутренние вбиваются (внутри CLR), бессмыслено париться о массиве указателей на строки, 0.1% сэкономим, а смысл где? Я так понял строки в структурах?


Плохо понял вопрос, но попробую ответить. Select из базы возвращает нечто подобное

str1 str2
str1 str3
str1 str4
str5 str6
str5 str7
str5 str8
и т.д,
т.е. значения в первой колонке отсортированны и повторяются. Этот результирующий набор я преобразовываю в массив структур

public class MyClass
{
    string field1;
    string[] field2;
}


Как выяснилось, по этому массиву нужно не только пробегаться, а нужно по field1, искать соответствующий field2. Причем программист, отвечающий за бизнес логику, на отрез отказался, что бы я ему возвращал Hashtable. Мотивирует это тем, что он будет искать с помощью Array.BinarySearch, и что якобы BinarySearch быстрее чем извлечение значения по ключу в Hashtable.

P.S. Проблема ушла за рамки изначального вопроса, но я в любом случае хотел разобраться с изначально заданным вопросом. Спасибо всем ответившим.
Re[2]: Какой массив расходует наименьшее количество памяти?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.04 17:51
Оценка:
Здравствуйте, TK, Вы писали:

TK>Меньше всего будет расходовать массив структур (MyType[]).


Логично.

TK> Для удобства работы можно взять CodeSmith который умеет генерировать типизированные версии будет аналог (ArrayList для структуры).


И какя разница будет с точки зрения расхода памяти с обычным ArrayList?
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Какой массив расходует наименьшее количество памяти?
От: TK Лес кывт.рф
Дата: 30.12.04 19:42
Оценка:
Hello, "VladD2"
>
> И какя разница будет с точки зрения расхода памяти с обычным ArrayList?

Внутри будет MyType[], а не object[]
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Какой массив расходует наименьшее количество памяти?
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.01.05 15:36
Оценка:
Здравствуйте, TK, Вы писали:

TK>Внутри будет MyType[], а не object[]


Это никака не влияет на расход памяти, если речь идет о хранении ссылочных типов.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Какой массив расходует наименьшее количество памяти?
От: TK Лес кывт.рф
Дата: 01.01.05 15:47
Оценка:
Hello, "VladD2"

> TK>Внутри будет MyType[], а не object[]

> Это никака не влияет на расход памяти, если речь идет о хранении ссылочных типов.

Тема была про массив структур. И ответы так-же были исходя из этого. Зачем надо приплетать сюда ссылочные типы — непонятно
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Какой массив расходует наименьшее количество памяти?
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.01.05 17:35
Оценка:
Здравствуйте, TK, Вы писали:

TK>Тема была про массив структур. И ответы так-же были исходя из этого. Зачем надо приплетать сюда ссылочные типы — непонятно


Где в вопросе Какой массив расходует наименьшее количество памяти?
Автор: basis
Дата: 29.12.04
структуры?
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Какой массив расходует наименьшее количество памяти?
От: TK Лес кывт.рф
Дата: 01.01.05 18:04
Оценка:
Hello, "VladD2"

> Где в вопросе Какой массив расходует наименьшее количество памяти?
Автор: basis
Дата: 29.12.04
структуры?


TK>Меньше всего будет расходовать массив структур(MyType[]). Для удобства работы можно взять CodeSmith который умеет генерировать типизированные версии будет аналог (ArrayList для структуры).

VD>И какя разница будет с точки зрения расхода памяти с обычным ArrayList?
TK>Внутри будет MyType[], а не object[]
VD>Это никака не влияет на расход памяти, если речь идет о хранении ссылочных типов.

Смотри на нить дискуссии.
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.