который является самым быстрым способом клонирования c # arraylist - PullRequest
0 голосов
/ 29 июля 2011

Поскольку строка subj делает это почти понятным, я хочу знать, какую разницу изменит клонирование обычного массива, если я сделаю любой из них в моем переопределенном методе Clone ().

MyArraylist - это просто производная от обычного arraylist.

ВАРИАНТ 1

return new MyArraylist(this);

ВАРИАНТ 2

MyArraylist temp = new MyArraylist();
temp = (MyArraylist)this.Clone();
return temp;

где это относится к Arraylist в фокусе, который должен быть клонирован . и у моего класса arraylist есть перегруженный конструктор

public MyArrayList(MyArrayList oArrayList)
{
    lock (oArrayList.SyncRoot)
    {
        foreach (object oObject in oArrayList)
        {
            if (oObject is ICloneable)
            {
                this.Add(((ICloneable)oObject).Clone());
            }
            else
            {
                this.Add(oObject);
            }
        }
    }
}

Есть ли падение производительности, которое возникает, если я использую как в ОПЦИИ 1. для относительно большего списка?

Надеюсь, мне ясно

1 Ответ

0 голосов
/ 29 июля 2011

После того, как вы опубликовали свой код, я думаю, что вы сравниваете клонирование только списка массивов (вариант 1) с клонированием списка массивов плюс клонирование любого клонируемого объекта в списке массивов друг против друга.
Редактировать: список массивов - это просто объект, содержащий ссылки. Таким образом, новый просто создает новый список массивов. Таким образом, у вас есть 2 списка массивов и х объектов. Второй вариант создаст новый список массивов и клонирует упомянутые объекты, поэтому вам потребуется 2 списка массивов и 2 * x объекта.
Это зависит от ваших требований, если вам нужен вариант 1 или вариант 2. Вариант 1 всегда будет быстрее, так как это меньше работы.

...