谁运行下面的应用程序会注意到:
- 窗口已经出现==>内存使用率19.3 MB
- 选择 “选项卡B” ==>内存使用率上升至40.3 MB
- 点击按钮 “操作” 删除 “选项卡B” ==>内存使用 下降到39.4 MB
问题:如何将内存消耗缩减至19.3 MB?
应用代码Xaml
:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow"
FontSize="14"
WindowStartupLocation="CenterScreen"
Height="230"
Width="530"
Visibility="Visible"
Loaded="Window_Loaded">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TabControl Name="tabControl" Grid.Row="0">
<TabItem Name="tabItem_1" Header="--- Tab A ---" />
<TabItem Name="tabItem_2" Header="--- Tab B ---">
<RichTextBox Name="rtb"
IsDocumentEnabled="True"
VerticalContentAlignment="Top"
HorizontalContentAlignment="Left"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
IsReadOnly="False"
AcceptsTab="True"
Margin="5,5,5,5"
Padding="5,5,5,5"/>
</TabItem>
</TabControl>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,10,10">
<Button Name="buttonAction" Content=" _Action " Click="buttonAction_Click" />
<Button Name="buttonCancel" Content=" _Cancel " Click="buttonCancel_Click" IsCancel="True" Margin="10,0,0,0" />
</StackPanel>
</Grid>
</Window>
应用代码C#
:
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;
namespace WpfApplication2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
/// <summary>
/// OnLoad.
/// </summary>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 6000; i++)
{
Run run = new Run("»Today is the day before tomorrow.« – »Are you sure, Mr President?« ");
Bold bold = new Bold(run);
Paragraph para = new Paragraph(bold);
if (i % 2 == 0)
para.Background = Brushes.SandyBrown;
else
para.Background = Brushes.Khaki;
rtb.Document.Blocks.Add(para);
}
rtb.Document.Blocks.Remove(rtb.Document.Blocks.FirstBlock);
tabItem_1.Focus();
}
/// <summary>
/// Button "Action".
/// </summary>
private void buttonAction_Click(object sender, RoutedEventArgs e)
{
tabControl.Items.RemoveAt(1);
}
/// <summary>
/// Button "Cancel".
/// </summary>
private void buttonCancel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
}