Как каждый добавляет LinkedList <T> к LinkedList <T> в C#?

Это зависит от количества изображений, которые Вы собираетесь сохранить и также их размеры. Я использовал базы данных для хранения изображений в прошлом, и мой опыт был довольно хорош.

IMO, Профессионалы использования базы данных для хранения изображений,

А. Вам не нужна структура FS для содержания изображений
B. Индексы базы данных работают лучше, чем деревья FS, когда больше количества объектов должно быть сохранено
C. Энергично настроенная база данных выполняет хорошее задание при кэшировании результатов запроса
D. Резервные копии просты. Это также работает хорошо, если Вам настраивали репликацию, и содержание освобождено с сервера близко к пользователю. В таких случаях не требуется явная синхронизация.

, Если Ваши изображения будут маленькими (говорят < 64k), и механизм устройства хранения данных Вашего дб поддерживает встроенный (в записи) БЛОБЫ, это улучшает производительность далее, поскольку никакая косвенность не требуется (Местность ссылки достигается).

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

22
задан John Calsbeek 8 July 2009 в 04:33
поделиться

2 ответа

Да, к сожалению, вам нужно выполнить цикл. Это операция O (n) - O (1) для каждой добавленной записи. Нет риска потребовать изменения размера и копирования буфера и т. Д. - хотя, конечно, сборка мусора может сделать примерно это :) Вы даже можете написать удобные методы расширения:

public static class LinkedListExtensions   
{
    public static void AppendRange<T>(this LinkedList<T> source,
                                      IEnumerable<T> items)
    {
        foreach (T item in items)
        {
            source.AddLast(item);
        }
    }

    public static void PrependRange<T>(this LinkedList<T> source,
                                       IEnumerable<T> items)
    {
        LinkedListNode<T> first = source.First;
        foreach (T item in items)
        {
            source.AddBefore(first, item);
        }
    }
}

EDIT: комментарий Эриха подсказывает, почему вы можете подумать, что это неэффективно - почему бы просто не объединить два списка вместе, обновив указатель «следующий» в конце первого списка и указатель «предыдущий» в заголовке второго? Хорошо, подумайте, что случилось бы со вторым списком ... он тоже изменился бы.

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

Хотя я могу понять, почему вы можете захотеть сделать это в некоторых В некоторых случаях способ построения типа .NET LinkedList в основном запрещает его. Думаю, этот документ объясняет это лучше всего:

Класс LinkedList ) делает не поддерживает связывание, разделение, циклы или другие функции, которые могут оставить список в непоследовательном состояние.

17
ответ дан 29 November 2019 в 05:21
поделиться
llist1 = new LinkedList<T>(llist1.Concat(llist2));

это объединяет два списка (требуется. NET 3.5). Недостатком является то, что он создает новый экземпляр LinkedList, который может быть не тем, что вам нужно ... Вместо этого вы можете сделать что-то вроде этого:

foreach(var item in llist2)
{
    llist1.AddLast(item);
}
8
ответ дан 29 November 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: