WPF FontFamily 폰트 리소스 동적 할당시 메모리 누수

프로그래밍을 하다보면, 디자인파일에 맞추기 위해 폰트를 설정합니다.

배포 특성상 타겟 윈도우에 폰트를 설치하기 꺼려지는 경우가 있는데요.
이때 어플리케이션과 함께 글꼴 패키징을 사용해 배포하는 경우가 있습니다.

마이크로소프트에도 관련 내용이 있습니다.

우리 닷넷데브에도 아래와 같은 내용이 있죠.

그래서 FontFamily를 사용했을 때, 메모리를 체크하기로 했습니다.(메모리 프로파일러까지는 사용하지는 않았습니다. 주말에 집이기도 해서 좀…)

  1. 폰트를 리소스에 넣어 StaticResource로 설정

ResourceDictionary

    <FontFamily x:Key="NotoBold">pack://application:,,,/TestProject;component/Fonts/NotoSansKR/NotoSansKR-Bold.otf#Noto Sans KR</FontFamily>
    <FontFamily x:Key="NotoRegular">pack://application:,,,/TestProject;component/Fonts/NotoSansKR/NotoSansKR-Regular.otf#Noto Sans KR</FontFamily>
<Window
    x:Class="TestProject.Views.MainWindow"
    ...
    FontFamily="{StaticResource NotoRegular}">
    <TextBlock Text="안녕하세요"/>
    <TextBlock Text="안녕하세요" FontFamily={StaticResource NotoBold}/>
</Window>
  1. 그냥 폰트를 설정하지 않음.

  2. 윈도우에 폰트를 설치 후 해당 폰트를 불러옴

MainWindow

<Window
    x:Class="TestProject.Views.MainWindow"
    ...
    FontFamily="Noto Sans KR Regular">
    <TextBlock Text="안녕하세요"/>
    <TextBlock Text="안녕하세요" FontFamily=Noto Sans KR Bold/>
</Window>

4.윈도우에 폰트를 설정 후 1번처럼 사용

ResourceDictionary

    <FontFamily x:Key="NotoBold">Noto Sans KR Bold</FontFamily>
    <FontFamily x:Key="NotoRegular">Noto Sans KR Regular</FontFamily>
<Window
    x:Class="TestProject.Views.MainWindow"
    ...
    FontFamily="{StaticResource NotoRegular}">
    <TextBlock Text="안녕하세요"/>
    <TextBlock Text="안녕하세요" FontFamily={StaticResource NotoBold}/>
</Window>

작업관리자 상 메모리 위에 나열한 사용 순서대로 보시면 됩니다. 위는 예제소스고 해당 방식을 사용한 제 토이 프로젝트를 실행 후 스크린샷을 찍어봤습니다.
image
image

폰트쪽은 보통 윈도우에 설치해서 사용했었는데, 동적으로 사용하려고보니 작업관리자 내 메모리가 급등해서 이 글을 올려봅니다. 해당 내용 관련해서 글도 몇개 있어서 참고차 올려봅니다.

이상입니다
여러분들은 어떻게 사용하실까요~~?

2개의 좋아요

인스톨러에 폰트를 넣어서
설치과정에 폰트도 설치하여
배포하고 있어요~

1개의 좋아요

저도 그방법이 나아보여서 그쪽으로 진행할까 하는데…

만약 이미 배포가 된 시점이라면 업데이터내에 추가 설치하게끔 진행하실까요?

그게그능할진…모르겠네요…!

1개의 좋아요