Не удивительно, что вы получаете OutOfMemoryException
. AFAIK Размер изолированного хранилища по умолчанию составляет максимум 1 МБ. Вы можете предложить пользователю увеличить это значение (IncreaseQuotaTo()
) или использовать шрифт меньшего размера (предпочтительно).
Редактировать : По поводу комментария.
Я заметил в оригинальном сообщении, что вы делаете TextBlock.Fontsource = new Fontsource(stream)
для каждого TextBlock
!
Это означает, что это ~ 22 МБ для каждого TextBlock, который вы создаете. Таким образом, для 100 текстовых блоков вы получаете 2,2 ГБ используемой памяти.
Вы должны кэшировать переменную И каким-то образом использовать шрифт меньшего размера. Вы можете сделать это статическим свойством, которое создается только при первом использовании (или, если вы используете его каждый раз, просто статическое свойство, инициализируемое конструктором):
public static class FontCache
{
public static FontSource MyCoolFontSource { get; set; }
static FontCache()
{
using (Stream fontStream = ...)
{
FontCache.MyCoolFontSource = new FontSource(fontStream);
}
}
}
и в коде:
TextBlock.Fontsource = FontCache.MyCoolFontSource;
Также обратите внимание, что вы действительно должны передавать шрифт из изолированного хранилища или из Application.GetResourceStream
.