Так что я пытаюсь заполнить большое количество значков списком. Чтобы избежать длительного времени ожидания, я пытаюсь загрузить его, чтобы загрузить первые 1000 результатов, а затем загрузить больше, если пользователь нажимает кнопку загрузки больше.Как ускорить добавление изображений в ImageList?
Здесь я застрял. Если я загружаю все 10 000+ значков сразу, мне требуется 37 секунд. Однако, если я решил добавить еще 500 значков каждый раз, когда пользователь нажимает кнопку, мне требуется 40 секунд, что хуже, чем добавление сразу! Единственное отличие в коде заключается в том, что мне пришлось сделать эту одну строку делегатом, чтобы избежать проблем с перекрестными потоками. Есть ли более быстрый способ сделать это?
for (int i = lastLoadedIndex; i < lastLoadedIndex+500; i++)
{
string file = resultArr[i];
Invoke((MethodInvoker)delegate()
{
this.imageList1.Images.Add(Image.FromFile(file));
});
}
Не уверен, что это имеет смысл в вашем приложении, но, возможно, вы можете использовать более одного ImageList? Может быть, один для статеров и другой, чтобы заполнить остальное, пока пользователь все еще просматривает первую партию. Отправляйте 1ok в 10 ImageLists .. – TaW
@JLYK поместите 'Image.FromFile (файл)' вне 'Invoke' блок. Ввод его в блок invoke приводит к тому, что он запускается в потоке графического интерфейса. – PoweredByOrange
Такая же проблема, как String vs StringBuilder. Очень важно использовать метод Items.AddRange(). Поэтому ему не нужно постоянно перераспределять внутреннее хранилище. –