Разрабатываю проект, который должен читать из .zip
архивов информацию (имя, описание, изображение). Для этой задачи я взял DotNetZip
.
Сделал DTO класс:
class ENBModel
{
public string Name { get; set; }
public BitmapImage Image { get; set; }
}
Далее сделал некую коллекцию, в которую загружаю из всех найденных файлов данные, делаю это примерно так:
foreach (var file in files)
{
using (var zip = ZipFile.Read(file))
{
var enb = new ENBModel();
using (var dataStream = new MemoryStream())
{
var dataZip = zip["PSSData.json"];
dataZip.Extract(dataStream);
var data = Encoding.Default.GetString(dataStream.ToArray());
var json = JsonConvert.DeserializeObject<FileDataModel>(data);
enb.Name = json.Name;
}
var imageSource = new BitmapImage();
using (MemoryStream imageSteam = new MemoryStream())
{
var imgZip = zip["Image.png"];
imgZip.Extract(imageSteam);
imageSource.BeginInit();
imageSource.StreamSource = imageSteam;
imageSource.CacheOption = BitmapCacheOption.OnLoad;
imageSource.EndInit();
enb.Image = imageSource;
}
Presets.Add(enb);
}
}
В результате я имею все необходимое для вывода данных в View. Делаю это простым ListBox
:
<ListBox ItemsSource="{Binding Presets}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
И после всех этих манипуляций я вижу, что у мое приложение кушает не 60мб RAM, а уже все 500. Я понимаю, да, идет хранение всех изображений в памяти, но как без этого быть?
Собственно, помогите это дело как то оптимизировать. Где бы я не находил про это информацию, везде совет "Поставьте CacheOption = BitmapCacheOption.OnLoad;
", но как видим стоит и результата ноль. Пробовал другие варианты, так вовсе получаю серые изображения.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Интересует, как хранить баланс пользователей в MySQL? Если во FLOAT, то он округляется и значения постоянно получаются неправильныеПробовал типы...
Тема мусолилась много еще с древних времен, когда на мамонтов ходили с копьями