WPF Q&A

3D Tools 사용해보신분 계십니까? 훈스훈스훈스 평점: 없음 조회: 277
1초마다 Refresh3D함수를 호출해서 그려주고 지워주고를 반복하고 있습니다.
그런데 가만히 나두면 조금씩 메모리가 증가하는게 보이더라구요.
다 지역변수고 그런데 왜 이렇게 늘어나는건지 모르겠습니다.
구글링 해보니 2008년도 자료에보면 Dispose함수가 있는것같은데 지금 쓰고있는 것에는 없구요.
뭐가문제인지 감이 잡히질 않네요 .
test.xaml 일부분
  <tools:TrackballDecorator>
                <Viewport3D Name="mainViewport" ClipToBounds="True" >
                    <Viewport3D.Camera>
                        <PerspectiveCamera FarPlaneDistance="30" LookDirection="-9,-9,-10" UpDirection="0,1,0" NearPlaneDistance="1" Position="5,9,10" FieldOfView="120" />
                    </Viewport3D.Camera>
                    <ModelVisual3D>
                        <ModelVisual3D.Content>
                            <DirectionalLight Color="White" Direction="-1,-1,-1" />
                        </ModelVisual3D.Content>
                    </ModelVisual3D>
                </Viewport3D>
            </tools:TrackballDecorator>
 
----------------------------------------------------------------------------------------
      public void Refresh3D()
        {
            Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(delegate
            {
                mainViewport.Children.Clear();
                Wireframe_Cube();
            }));
        }
 
 
private void Wireframe_Cube()
        {
            
            double sizeonly = 8d;
            double startszie = (sizeonly/2d) - sizeonly;
            double size = sizeonly / 2d;
            double heightsize = sizeonly;
            Point3D r1 = new Point3D(startszie, 0, 0);
            Point3D r2 = new Point3D(size, 0, 0);
            Point3D r3 = new Point3D(size, 0, 0);
            Point3D r4 = new Point3D(size, heightsize, 0);
            Point3D r5 = new Point3D(size, heightsize, 0);
            Point3D r6 = new Point3D(startszie, heightsize, 0);
            Point3D r7 = new Point3D(startszie, heightsize, 0);
            Point3D r8 = new Point3D(startszie, 0, 0);
 
            Point3D e1 = new Point3D(startszie, 0, 0);
            Point3D e2 = new Point3D(startszie, 0, sizeonly);
            Point3D e3 = new Point3D(size, 0, 0);
            Point3D e4 = new Point3D(size, 0, sizeonly);
            Point3D e5 = new Point3D(size, heightsize, 0);
            Point3D e6 = new Point3D(size, heightsize, sizeonly);
            Point3D e7 = new Point3D(startszie, heightsize, 0);
            Point3D e8 = new Point3D(startszie, heightsize, sizeonly);
 
            Point3D w1 = new Point3D(startszie, 0, sizeonly);
            Point3D w2 = new Point3D(size, 0, sizeonly);
            Point3D w3 = new Point3D(size, 0, sizeonly);
            Point3D w4 = new Point3D(size, heightsize, sizeonly);
            Point3D w5 = new Point3D(size, heightsize, sizeonly);
            Point3D w6 = new Point3D(startszie, heightsize, sizeonly);
            Point3D w7 = new Point3D(startszie, heightsize, sizeonly);
            Point3D w8 = new Point3D(startszie, 0, sizeonly);
 
            ScreenSpaceLines3D cube_wireframe = new ScreenSpaceLines3D();
          
            cube_wireframe.Points.Add(r1);
            cube_wireframe.Points.Add(r2);
            cube_wireframe.Points.Add(r3);
            cube_wireframe.Points.Add(r4);
            cube_wireframe.Points.Add(r5);
            cube_wireframe.Points.Add(r6);
            cube_wireframe.Points.Add(r7);
            cube_wireframe.Points.Add(r8);
 
            cube_wireframe.Points.Add(e1);
            cube_wireframe.Points.Add(e2);
            cube_wireframe.Points.Add(e3);
            cube_wireframe.Points.Add(e4);
            cube_wireframe.Points.Add(e7);
            cube_wireframe.Points.Add(e8);
 
            cube_wireframe.Points.Add(w1);
            cube_wireframe.Points.Add(w2);
            cube_wireframe.Points.Add(w7);
            cube_wireframe.Points.Add(w8);
 
 
 
            cube_wireframe.Color = Colors.White;
 
            cube_wireframe.Thickness = 2;
 
 
            mainViewport.Children.Add(cube_wireframe);
            cube_wireframe = null;
 
 
        }
태그 : 3ㅇ
작성자 정보
훈스훈스훈스
Level 35
 [EXP.24/80]

메일:  비공개
글등록 +12 402 덧글등록 +3 24
자기소개
H2
글 공유하기 |
  tweet facebook
2016-11-17 오전 10:05:49
나도한마디
사용자
지후니파파            [2016-11-17]
Level 31
 [EXP.14/80]
mainViewport.Children.Add(cube_wireframe); <-- 이 부분에서 계속 Add 하고 있어서 memory 증가 하는 것으로 보입니다.
사용자
지후니파파            [2016-11-17]
Level 31
 [EXP.14/80]
아...Wireframe_Cube() 호출 전에 Clear하네요....Refresh3D 함수는 1초마다 실행하신다고하셨으니... 근데 비동기 방식인 Begininvoke로 구현하셔서.... 작업 처리속도가 호출속도를 따라오지 못하는거 같습니다. 그래서 점차 메모리 증가하는것으로 보이네요
public void Refresh3D()
{
Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(delegate
{
mainViewport.Children.Clear();
Wireframe_Cube();
}));
}

사용자
훈스훈스훈스            [2016-11-17]
Level 35
 [EXP.24/80]
답변감사합니다.
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{

로 변경해보았지만 동일하네요.
사용자
지후니파파            [2016-11-17]
Level 31
 [EXP.14/80]
근본적인 해결 방법은 아니지만 이렇게 하시면 Memory증가는 없을꺼 같은데 갱신이 렉걸린것 처럼 보일거 같네요
public void Refresh3D()
{
mainViewport.Children.Clear();
Dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate
{
Wireframe_Cube();
}));
}
태그로 엮인글
글리스트
WPF 화면크기 메모리[2]  심연의감시자
Label 에는 Font Family가 적용안되고 TextBlock에는 되네요..[1]  바보쿠우
WPF 탭컨트롤 질문입니다.[3]  대봉대봉
Xaml 에서 WindowState 질문드려요[1]+1  바보쿠우
윈폼 질문드려요 'ㅁ'/[1]+1  키모
Viewport3D 의 children 컨트롤 해줄수 있나요 ?[1]  훈스훈스훈스
DataGrid... DB에서 가져온 날짜형식이 뒤집혀서 나오네요 ㅠ[1]+1  싸인트
트리뷰 아이템의 맨앞에 화살표(?) 제거할수 있나요??[2]+2  대봉대봉
WPF textbox 특정 문자만 입력가능하게 만들기[1]+1  아힝헝홍
RadioButton 의 Content 의 문자열에 따라 다른 Control의 Visibility 를 변경 하려 ...[1]  비가와요
 ★현재글->   3D Tools 사용해보신분 계십니까?[1]+3  훈스훈스훈스
WPF의 윈XP 지원여부[2]  모리군
이미지 점점 커지게 하기[1]  나무늘보
WPF 는 Windows Forms 와는 달리 Try 를 꼭.....[3]+3  어렵게설명하면안됨
WPF Snapping Window 에 대해서 질문드리겠습니다  대봉대봉
MainWindow 비 정상 종료 시  Help
WPF 야구공 구현하는 방법[1]  나무늘보
WPF 에서는 Class Type 이 Reference Type 이 아닌가요?[3]+4  어렵게설명하면안됨
[RE] WPF 에서는 Class Type 이 Reference Type 이 아닌가요?[1]  족구
GeometryModel3D 객체 많은 량 사용시 버벅임[3]+1  훈스훈스훈스
WPF 디자인 관련 문의드립니다.  Help