Как мне кэшировать изображение

#c# #caching

#c# #кэширование

Вопрос:

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

 if (listBox1.SelectedIndex == 0)
    {


        richTextBox1.Text = "Explore any game with Dex";
        pictureBox1.Load("THE LINK ");
        ProtoxRe.lol = 0;

    }
    else if ((listBox1.SelectedIndex == 1))
    {
        richTextBox1.Text = "SOME TEXT";
        pictureBox1.Load("LINK");
        ProtoxRe.lol = 1;
    }
    
  

Комментарии:

1. Сохраните изображение в переменной (по выбору дилеров), а затем проверьте, не является ли переменная нулевой, прежде чем переходить в Интернет. Если вам нужна более подробная информация, вам нужно опубликовать некоторый код для демонстрации.

2. @WSC Я новичок в c #, можете ли вы сказать мне, как это сделать? Да, я знаю, что это ложная подача, но мне очень нужна помощь

3. Смотрите Lazy<T> или Polly — MemoryChache/cachePolicy , или даже предварительно загрузите изображение и повторно используйте предварительно загруженный экземпляр …

4. @Potatox Я добавил пример, но без более подробной информации о том, что вы пытаетесь сделать, трудно сказать, насколько это подходит в качестве решения. Если вы предоставите более подробную информацию, я соответствующим образом обновлю свой ответ.

5. Если у вас есть одно изображение для загрузки, сохраните объект изображения. Если у вас есть больше изображений, создайте объект класса, который содержит URI ресурса и объект изображения (плюс все остальное, что может быть полезно в вашем контексте). Используйте a List<class> для хранения ссылок на изображения. Прежде чем запрашивать изображения из Интернета, проверьте, сохранен ли этот URI. Загрузите, если это не так. — Все типы веб-запросов предоставляют асинхронные методы для извлечения ресурсов из сети.

Ответ №1:

Вероятно, существуют более сложные методы, и это предполагает, что ваше изображение не изменится, но вы можете сделать что-то вроде этого:

 //Image class is from this library
using System.Drawing;

//The scope of this will depend on where you need to access it from
Image img;

private Image GetImage()
{
    if (img == null)
    {
        img = GetImageFromHttp();
    }
    return img;
}
  

Это очень просто и имеет ряд недостатков; вы не кэшируете его между сеансами, поэтому для каждого запуска приложения потребуется http get, и вы не проверяете, отличается ли изображение в Интернете, но это отправная точка.