Ну вообще то есть подозрение что это может ускорить работу
Но бороться за какие-то там микросекунды на практике пока что не так уж и важно.
Скорее просто академический интерес к этому.
.....
Мои тесты показали, что быстрее запросить один раз большой кусок памяти,
чем много раз просить по чуть-чуть.
Если говорить чисто о массивах и списках, то по моему опыту массив до 300 тысяч элементов по такой схеме работает быстро.
Заметное время выполнения начинается примерно от 500 тысяч элементов и выше, либо когда в цикле запускается другой цикл на создание массива.
Т.е. сама необходимость что-то оптимизировать может начинаться от 1 млн. циклов. (Зависит от железа, помещаемых в массив объектов и других факторов.) В Autocad таких задач мало.
Предполагаю, что в C# есть какой то способ выделить память в куче под объекты, вызвать один раз создание объекта new class() и затем склонировать его в цикле.
Это будет иметь какой-то эффект, но выигрыш может достигать 10% при том, что ты можешь потратить неделю на изучение вопросов и значительно усложнишь код.
Что касается конкретно автокада, то объекты Line и другие являются врапперами над реальными объектами, которые могут храниться в базе данных чертежа, а могут быть не добавлены в нее.
можно ли их вообще их клонировать, и все ли врапперы можно клонировать в памяти? скорее всего нет.
По скорости массивов я давно тестировал, расклад примерно такой.
Ты использовал массив. и изначально указал его размер что уже быстро. List<> работает примерно в 1,7 раза медленнее.
Далее ты испольовал цикл for, он тоже быстрее цикла foreach раза в 1,5.
Единственное что не оптимально, это вычисление размера массива в цикле for (int i = 0; i < lns.Length; i++)
Для больших массивов и списков нужно делать так:
int count = lns.Length;
for (int i = 0; i < count; i++)
Т.е. получается что работа Array&for быстрее в 2-3 раза, чем List&foreach.
Кажется вот оно ускорение, но на самом деле нет!
Пустой цикл тебе не нужен, внутри цикла что-то делается.
Когда ты добавишь внутрь цикла Lns
= new CAD_DB.Line(); и замеришь разницу Array&for vs List&foreach , то она окажется смехотворно мала 2-5%.
А если внутри цикла работа с Database и Transaction то выйгрышь около нуля.
Поэтому я использую List&foreach практически всегда, удобнее, кода меньше, с тем же результатом.