안녕하세요 MVVM 패턴을 이용해 재고관리 프로그램을 만드는중인 초보 개발자입니다.
DataGrid에 ObservableCollection 을 바인딩하여 데이터를 표시하고 LINQ를 이용해 컬렉션에서 데이터를 필터링해 조건에 부합하는 값들만 DataGrid에 표시하기 위해 컬렉션을 Clear() 하고 Add() 하는 과정에서 메모리 사용량이 증가하여 GC가 발생해도 사용량이 줄어들지 않는 문제를 겪고있습니다. DataGrid를 주석처리 한 뒤 디버깅 했을때는 메모리 누수가 발생하지 않았습니다. DataGrid 뷰를 업데이트할때 효율적으로 메모리를 관리하는 방법이 없을까요?
두서없는 질문 죄송합니다.
<DataGrid
x:Name="WorkGrid"
Grid.Row="4"
Grid.RowSpan="6"
Grid.ColumnSpan="14"
Width="auto"
Height="520"
Margin="10"
AlternationCount="2"
AutoGenerateColumns="False"
Background="#2c2c30"
CanUserAddRows="False"
CanUserResizeColumns="True"
EnableRowVirtualization="True"
HorizontalScrollBarVisibility="Hidden"
IsReadOnly="True"
ItemsSource="{Binding ResultViewList, Mode=OneWay}"
ScrollViewer.CanContentScroll="True"
SelectedItem="{Binding SelectedRow, Mode=TwoWay}"
VerticalScrollBarVisibility="Visible"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<DataGrid.Columns>
<DataGridTextColumn
MinWidth="130"
Binding="{Binding WorkGroup, Mode=OneWay}"
Header="작업그룹"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="115"
Binding="{Binding ProdCd, Mode=OneWay}"
Header="상품코드"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="115"
Binding="{Binding Barcode, Mode=OneWay}"
Header="바코드"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="200"
Binding="{Binding ProdNm, Mode=OneWay}"
Header="상품명"
IsReadOnly="True">
<DataGridTextColumn.CellStyle>
<Style BasedOn="{StaticResource MaterialDesignDataGridCell}" TargetType="{x:Type DataGridCell}">
<Setter Property="Padding" Value="0,5,0,5" />
<Setter Property="Width" Value="auto" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="TextBlock.TextAlignment" Value="Justify" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="#2c2c30" />
<Setter Property="Foreground" Value="#FEB41C" />
<Setter Property="BorderBrush" Value="WhiteSmoke" />
<Setter Property="BorderThickness" Value="1.5" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn
MinWidth="90"
Binding="{Binding CustCd, Mode=OneWay}"
Header="거래처코드"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="80"
Binding="{Binding CustNm, Mode=OneWay}"
Header="거래처명"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="50"
Binding="{Binding Category, Mode=OneWay}"
Header="구분"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="80"
Binding="{Binding Quantity, Mode=OneWay}"
Header="작업수량"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="80"
Binding="{Binding ModQty, Mode=OneWay}"
CanUserSort="True"
Header="수정수량"
SortMemberPath="ModQty" />
<DataGridTextColumn
MinWidth="65"
Binding="{Binding Worker, Mode=OneWay}"
Header="작업자"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="115"
Binding="{Binding WorkDate, StringFormat={}{0: yyyy-MM-dd tt HH:mm}, ConverterCulture='ko-kr', Mode=OneWay}"
Header="작업일"
IsReadOnly="True" />
<DataGridTextColumn
MinWidth="100"
Binding="{Binding Device, Mode=OneWay}"
Header="디바이스"
IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>