こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

wpf datagrid メモリリーク

wpfのdatagridを利用してデータ表示しております。
1レコードを多段構成で表示するため、ユーザーコントロールにdatagridを配置し、グリッド内に各コントロールを配置する方法で実現しております。
チェックボックスも配置しており、スクロール時に初期化される現象が発生したため、仮想化をOFFにしております。

少ないデータ件数であれば問題ないのですが、大量データ(3500件程度)の場合には
メモリリークしてしまいます。

DataGridにチェックボックスを配置した場合の実装で、上記の事象を
改善する方法をご存知の方がいらっしゃいましたらご教授頂けると幸いです。

以下2つが実装しているxamlとなります。

★Grid_Tab_Roke_Main
 ユーザーコントロールにDataGridを配置したものとして実装しています。

<UserControl x:Class="Grid_Tab_Roke_Main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:_XX_WPF商品管理"
mc:Ignorable="d"
d:DesignHeight="200.373" d:DesignWidth="300" Height="Auto" Width="Auto">

<DataGrid ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="False" VirtualizingStackPanel.VirtualizationMode="Standard" EnableColumnVirtualization="False" EnableRowVirtualization="False" ScrollViewer.CanContentScroll="True" ScrollViewer.IsDeferredScrollingEnabled="True" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility="None" Margin="0,0,0,0">
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:Grid_Tab_Roke_Detail />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UserControl>

★Grid_Tab_Roke_Detail
グリッド内にコントロールを配置しており、データテーブルよりバインドしています。項目は全て数点を抜粋して記載しております。

<UserControl x:Class="Grid_Tab_Roke_Detail"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="70" Width="1227" Background="White" Loaded="UserControl_Loaded">

<Grid>
<TextBox x:Name="Text_Roke" Text="{Binding ロケーション名, Mode=OneTime, StringFormat=\{0:N0\}}" HorizontalAlignment="Left" Height="21" Margin="56,22,0,27" TextWrapping="Wrap" VerticalAlignment="Center" Width="181" RenderTransformOrigin="0.406,0.026" Background="{x:Null}" FontFamily="Arial" VerticalContentAlignment="Center" FontWeight="Bold" MaxWidth="200" MinHeight="16" IsHitTestVisible="True" FontSize="16" Foreground="Black"/>
<TextBox x:Name="Text_HinCD" Text="{Binding 商品コード, Mode=OneTime, StringFormat=\{0:N0\}}" HorizontalAlignment="Left" Height="21" Margin="242,22,0,27" TextWrapping="Wrap" VerticalAlignment="Center" Width="62" RenderTransformOrigin="0.406,0.026" Background="{x:Null}" FontFamily="Arial" VerticalContentAlignment="Center" FontWeight="Bold" MaxWidth="150" MinHeight="16" IsHitTestVisible="True" FontSize="16" Foreground="Black"/>
<CheckBox x:Name="Chk_Sentaku" Content="選択" IsChecked="{Binding IsSelected.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="3,3,0,0" VerticalAlignment="Top" Width="48" Height="65" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"
/>
<TextBox x:Name="Text_HinNM" Text="{Binding 商品名, Mode=TwoWay, StringFormat=\{0:N0\}}" HorizontalAlignment="Left" Height="21" Margin="304,22,0,27" TextWrapping="Wrap" VerticalAlignment="Center" Width="330" RenderTransformOrigin="0.406,0.026" Background="{x:Null}" FontFamily="Arial" VerticalContentAlignment="Center" FontWeight="Bold" MaxWidth="350" MinHeight="16" IsHitTestVisible="True" FontSize="16" Foreground="Black"/>
</Grid>


</UserControl>

投稿日時 - 2018-07-31 16:15:02

QNo.9523605

すぐに回答ほしいです

質問者が選んだベストアンサー

>少ないデータ件数であれば問題ないのですが、大量データ(3500件程度)の場合にはメモリリークしてしまいます。

解決策が分かるわけではないのですが「メモリリーク」を、どういう意味で使われていますか?(メモリが大量に使われるという意味で使っていたりしませんか?)
本来メモリリークは解放すべきメモリが解放されていない(再利用されない)状態なので、メモリリークと分かった時点で解決法は自ずと分かるはずなんですけど。

投稿日時 - 2018-07-31 19:02:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問