Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# медленно работает код загрузки изображения

Сергей Власенко Ученик (50), на голосовании 2 недели назад
 using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApp1
{

public partial class Form1 : Form
{
int ch = 0;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

listView1.Items.Clear();

ImageList imageList = new ImageList { ImageSize = new Size(100, 100) };

imageList.ColorDepth = ColorDepth.Depth32Bit;

listView1.LargeImageList = imageList;


string[] Address_To_The_Folder_With_Images_Array = Directory.GetFiles(@"d:\Images\");

for (int i = 0; i < Address_To_The_Folder_With_Images_Array.Length; i++)
{

try
{
using (FileStream stream = new FileStream(Address_To_The_Folder_With_Images_Array[i], FileMode.Open, FileAccess.Read))
{

Image image = Image.FromStream(stream);

imageList.Images.Add(image);

stream.Close();

}


}

catch (Exception)

{
MessageBox.Show("No data");

break;
}
}

for (int index = 0; index < imageList.Images.Count; index++)

{
ch++;

ListViewItem item = new ListViewItem { ImageIndex = index };

listView1.Items.Add(item);

label1.Text = Convert.ToString("Количество фото:" + " " + ch + " " + "штук");
}




}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
Всем привет. Такая проблема. Пишу программу для работы с файлами. К каждому отдельному файлу привязано изображение. При обращении к изображению редактируется файл. Выше представил "кусок" кода именно загрузки изображения. В принципе все работает как и планировал, но один нюанс есть. Долгая загрузка изображений в ListView. Причем действительно долгая как будто не 500 фото гружу, а 5.000. Есть мысли, что сборщик мусора долго отрабатывает. Но только мысли. Так что нужен совет как улучшить этот код для нормальной загрузки изображений.
Голосование за лучший ответ
Кирилл Матков Ученик (206) 1 месяц назад
Оптимизация загрузки изображений в ListView

Чтобы улучшить производительность загрузки изображений в ListView, можно предпринять следующие шаги:

1. Асинхронная загрузка:
Используй асинхронные методы, такие как Task.Run , для загрузки изображений в отдельном потоке. Это позволит избежать блокировки пользовательского интерфейса во время загрузки.

2. Кэширование изображений:
Кэшируй загруженные изображения, чтобы избежать повторной загрузки одного и того же изображения при повторном отображении ListView.

3. Ограничение размера изображений:
Ограничь размер загружаемых изображений до необходимого минимума. Это снизит объем данных, которые необходимо загрузить и обработать.

4. Использование пула потоков:
Используй пул потоков для параллельной загрузки нескольких изображений. Это может значительно ускорить процесс загрузки.

5. Оптимизация кода:
Оптимизируй код, устраняя ненужные операции и используя более эффективные алгоритмы.

Если нужен изменённый код, то напиши в телеге: @uikons
Редис Александрович Оракул (79151) 1 месяц назад
Какой ленивый код, медленно работает. Выпиши ему выговор, за то что он асинхронно побайтово читает сотни картинок, а хозяин в это время аниме не может смотреть
Jurijus ZaksasИскусственный Интеллект (442894) 1 месяц назад
То-то и оно, что синхронно. Если бы асинхронно, может, так и не тормозило бы.
Редис Александрович Оракул (79151) Jurijus Zaksas, да, это я уже глупости пишу
Jurijus Zaksas Искусственный Интеллект (442894) 1 месяц назад
Попробуй завести себе пул потоков, но осторожнее с ними. Не делай их больше, чем есть физических ядер, распределяй задачи заранее (я бы отсортировал картинки по размеру и раскидал более-менее равномерно), аккуратно синхронизируй через тот же imageList.
Похожие вопросы