forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   List and alias. (http://forum.boolean.name/showthread.php?t=14429)

FireOwl 17.03.2011 01:08

List and alias.
 
Мой первый пост по делу, за долгое время. =)

Перебрался с бейсика на C#. Пишу по малости, скоро игру выложу.

Конкретно вопрос:
Когда писал на бейсике, и требовалось создать множество неких объектов, постоянно изменяющее свой размер, объявлял Type и был доволен.
На C# в аналогичных случаях употребляю List<>.
Я конечно не пишу программу перехвата управления спутниками ВВС США в реальном времени, но интересно, сколько и чего жрет List по сравнению с массивами?

moka 17.03.2011 02:02

Ответ: List and alias.
 
Дык сделай замеры, есть хеш таблицы (Dictionary) есть такие списки (ListArray) и т.п.
Сделай замеры, миллисекунды получай: System.Environment.TickCount

Dream 17.03.2011 02:06

Ответ: List and alias.
 
ну вообщемто переживать по поводу памяти в наше время не особо стоит волноватся(ну поянтное дело я не о том чтобы создать 100500 ненужных классов и оставить их, про такую вещь как размер списков и словарей). если особо интересно полистай msdn. также во время исполнентя можешь сотановить и посмотреть Capacity - это размер памяти выделеный для листа листа. Также, если зарание известен размер листа, то лучше иницализировать его спараметром Capacity - это ускорит добавление елементов в будующем(пока эти елементы не вылезут за ганицу) )
ПО поводу скорости доступа к елементам, то тут да, масивы работаеют на порядок быстрее.
Вот кстати пример по поводу выделяемой памяти-
Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mime;
using System.Text;

namespace ListTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<object> objects=new List<object>();
            objects.Add(new object());
            int capacity=objects.Capacity;
            for (int i = 0; i < 15; i++)
            {
                capacity = objects.Capacity;
                int size = objects.Count;
                Console.WriteLine("ExistElemets={0} Capacity={1}",size,capacity);
                for (int j = 0; j < capacity-size+1; j++)
                {
                    objects.Add(new object());
                   
                }
            }
            Console.ReadKey();
        }
    }
}


moka 17.03.2011 03:42

Ответ: List and alias.
 
Dream, тут скорее вопрос скорости а не памяти.
Например если это сервер, то ему нужно быстро списками орудовать..

FireOwl 17.03.2011 04:21

Ответ: List and alias.
 
Мне все важно! :) Спасибо.

З.Ы. Свойство Capacity здорово к месту пришлось. Как-то я его упускал из виду.

Dream 17.03.2011 04:52

Ответ: List and alias.
 
Цитата:

Сообщение от MoKa (Сообщение 183016)
Dream, тут скорее вопрос скорости а не памяти.
Например если это сервер, то ему нужно быстро списками орудовать..

Ты откуда знаешь в чём там вопрос? К чему твой комментарий?
В своем посте я указал как о памяти так и скорости доступа

moka 17.03.2011 14:13

Ответ: List and alias.
 
Цитата:

Сообщение от Dream (Сообщение 183018)
Ты откуда знаешь в чём там вопрос? К чему твой комментарий?
В своем посте я указал как о памяти так и скорости доступа

Это было в основном к этому:
Цитата:

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

Dream 17.03.2011 14:33

Ответ: List and alias.
 
Перечитай пожалуйста первый пост ещё раз.
Или ты у нас тоже "между строк" читаешь?

moka 17.03.2011 14:59

Ответ: List and alias.
 
Цитата:

Сообщение от Dream (Сообщение 183044)
Перечитай пожалуйста первый пост ещё раз.
Или ты у нас тоже "между строк" читаешь?

Да не прочитал всё, ты сказал что массив будет быстрее и т.п.
Только дело стоит в том что списки есть разные, иногда нужен доступ по индексу, а иногда по int номеру, которое назначается другим механизмом и в списке не последовательно и т.п. различия списков.

Тебя что-то задевает тут? ;)

Dream 17.03.2011 15:25

Ответ: List and alias.
 
Ты прикидываешься? Как цель использование влияет на скорость?

moka 17.03.2011 15:37

Ответ: List and alias.
 
Цитата:

Сообщение от Dream (Сообщение 183052)
Ты прикидываешься? Как цель использование влияет на скорость?

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


Часовой пояс GMT +4, время: 20:43.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot