#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, и вы не проверяете, отличается ли изображение в Интернете, но это отправная точка.