C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: コンボボックスのDataSourceについて


(過去ログ 95 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■56734 / inTopicNo.1)  コンボボックスのDataSourceについて
  
□投稿者/ pon (1回)-(2011/01/28(Fri) 13:43:04)

分類:[.NET 全般] 

VisualStudio2008 FrameWork2.0 VB

MDI親フォーム(Form1)より、コンボボックスを1つ配置したMDI子フォーム(Form2)を起動し閉じるを繰り返します。

Form2のコンボボックスのDataSourceに何も設定しない場合は、
GC.GetTotalMemory(True)のメモリ使用量はある一定で止まります。

しかしコンボボックスのDataSourceにDataTableを設定すると
GC.GetTotalMemory(True)のメモリ使用量がずっと増え続けます。
System.GC.Collect()を実行しても増え続けます。

どうして増え続けるのでしょうか?
また対応策などがありましたらご教授ください。
よろしくお願いします。

◆Form1.Designer.vb◆
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
    'Windows フォーム デザイナを使用して変更できます。  
    'コード エディタを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.MenuStrip1 = New System.Windows.Forms.MenuStrip
        Me.Form2ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem
        Me.MenuStrip1.SuspendLayout()
        Me.SuspendLayout()
        '
        'MenuStrip1
        '
        Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.Form2ToolStripMenuItem})
        Me.MenuStrip1.Location = New System.Drawing.Point(0, 0)
        Me.MenuStrip1.Name = "MenuStrip1"
        Me.MenuStrip1.Size = New System.Drawing.Size(292, 24)
        Me.MenuStrip1.TabIndex = 1
        Me.MenuStrip1.Text = "MenuStrip1"
        '
        'Form2ToolStripMenuItem
        '
        Me.Form2ToolStripMenuItem.Name = "Form2ToolStripMenuItem"
        Me.Form2ToolStripMenuItem.Size = New System.Drawing.Size(62, 20)
        Me.Form2ToolStripMenuItem.Text = "form2(&O)"
        '
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Controls.Add(Me.MenuStrip1)
        Me.IsMdiContainer = True
        Me.MainMenuStrip = Me.MenuStrip1
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.MenuStrip1.ResumeLayout(False)
        Me.MenuStrip1.PerformLayout()
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub
    Friend WithEvents MenuStrip1 As System.Windows.Forms.MenuStrip
    Friend WithEvents Form2ToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem

End Class

◆Form1.vb◆
Public Class Form1

    Private Sub Form2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Form2ToolStripMenuItem.Click
        System.GC.Collect()
        System.GC.WaitForPendingFinalizers()
        System.GC.Collect()

        Dim openfrm As Form = New Form2

        openfrm.MdiParent = Me
        'openfrm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        'openfrm.StartPosition = FormStartPosition.Manual
        'openfrm.Location = New Point(0, 0)
        'openfrm.Dock = DockStyle.Fill
        openfrm.Show()

    End Sub
End Class

◆Form2.Designer.vb◆
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form2
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
    'Windows フォーム デザイナを使用して変更できます。  
    'コード エディタを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.ComboBox1 = New System.Windows.Forms.ComboBox
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(41, 141)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(75, 23)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Button1(&O)"
        Me.Button1.UseVisualStyleBackColor = True
        '
        'ComboBox1
        '
        Me.ComboBox1.FormattingEnabled = True
        Me.ComboBox1.Location = New System.Drawing.Point(41, 36)
        Me.ComboBox1.Name = "ComboBox1"
        Me.ComboBox1.Size = New System.Drawing.Size(121, 20)
        Me.ComboBox1.TabIndex = 1
        '
        'Form2
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Controls.Add(Me.ComboBox1)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form2"
        Me.Text = "Form2"
        Me.ResumeLayout(False)

    End Sub
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox
End Class

◆Form2.vb◆
Public Class Form2


    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim tbl As New DataTable
        tbl.Columns.Add("Key", GetType(Integer))
        tbl.Columns.Add("Value", GetType(String))

        tbl.Rows.Add(New Object() {1, "one"})
        tbl.Rows.Add(New Object() {2, "two"})

        With ComboBox1
            .DropDownStyle = ComboBoxStyle.DropDownList
            .ValueMember = "Key"
            .DisplayMember = "Value"
            .DataSource = tbl   '★ここをコメントにするとメモリが増えない。
            .SelectedIndex = -1
        End With

        Console.WriteLine(Me.Name & ":" & GC.GetTotalMemory(True))

    End Sub

    Private Sub Form2_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Me.Button1.Focus()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Close()
    End Sub


End Class

引用返信 編集キー/
■56735 / inTopicNo.2)  Re[1]: コンボボックスのDataSourceについて
□投稿者/ shu (386回)-(2011/01/28(Fri) 14:40:59)
No56734 (pon さん) に返信

Dim openfrm As Form = New Form2

Dim tbl As New DataTable
に対してDisposeは行っているのでしょうか?

引用返信 編集キー/
■56738 / inTopicNo.3)  Re[2]: コンボボックスのDataSourceについて
□投稿者/ pon (2回)-(2011/01/28(Fri) 15:29:36)
Shuさんありがとうございます。

> Dim openfrm As Form = New Form2
> と
> Dim tbl As New DataTable
> に対してDisposeは行っているのでしょうか?

まずフォームですが、ShowDialogで表示していないのでDispose不要だと思います。
次にDataTableはコンボボックスのDataSourceに設定しているのでDispose不要だと思っています。

よろしくお願いいたします。
引用返信 編集キー/
■56740 / inTopicNo.4)  Re[3]: コンボボックスのDataSourceについて
□投稿者/ shu (388回)-(2011/01/28(Fri) 15:54:49)
No56738 (pon さん) に返信

> まずフォームですが、ShowDialogで表示していないのでDispose不要だと思います。
Formが閉じられたときにDisposeしないとGCの処理が遅れます。下手をするとアプリ終了まで残ります。

> 次にDataTableはコンボボックスのDataSourceに設定しているのでDispose不要だと思っています。
DataSourceで使っている間は良いですがFormを閉じて使用しなくなったときにDisposeが必要です。
Formと同様。

DisposeがあるObjectは基本的にDisposeした方がよいです。デザイナで貼り付けたコントロールはcomponent
により破棄されるので不要ですが。
引用返信 編集キー/
■56745 / inTopicNo.5)  Re[4]: コンボボックスのDataSourceについて
□投稿者/ todo (109回)-(2011/01/28(Fri) 17:58:25)
> しかしコンボボックスのDataSourceにDataTableを設定すると
> GC.GetTotalMemory(True)のメモリ使用量がずっと増え続けます。

何バイトですか?

> まずフォームですが、ShowDialogで表示していないのでDispose不要だと思います。
> 次にDataTableはコンボボックスのDataSourceに設定しているのでDispose不要だと思っています。

以下をお試しください。

・Form2を重くする実験
Me.Tag = New Byte(10000) {}

・DataTableを重くする実験
2行→1万行

・コンボボックスを重くする実験
comboBox1.Tag = New Byte(10000) {}
引用返信 編集キー/
■56750 / inTopicNo.6)  Re[5]: コンボボックスのDataSourceについて
□投稿者/ じゃんぬねっと (25回)-(2011/01/29(Sat) 06:25:00)
切り分けから言って、どう考えても、DataTable、Form のせいではないですよねぇ...
ComboBox の DataSource さんの仕組みそのものに起因しているとしか思えないのですが...

# 某 3rd パーティ製品の DataSource なんて、この比にならないくらいヒドイと思うけど。
引用返信 編集キー/
■56758 / inTopicNo.7)  Re[6]: コンボボックスのDataSourceについて
□投稿者/ shu (389回)-(2011/01/29(Sat) 23:27:31)
No56750 (じゃんぬねっと さん) に返信
> 切り分けから言って、どう考えても、DataTable、Form のせいではないですよねぇ...
> ComboBox の DataSource さんの仕組みそのものに起因しているとしか思えないのですが...
確かめてはいませんがFormのDisposeってComboBoxの解放までしてくれるんじゃないのかな?
駄目だとしたらComboBoxのDatasourceを明示的に解放するには後Nothingいれるくらいかな。


いずれにしろ解放をGCに頼ってばかりはいられない気がします。WindowsのCoreがManagedに
なればGCだけでも出来るのかもしれませんが。



引用返信 編集キー/
■56806 / inTopicNo.8)  Re[5]: コンボボックスのDataSourceについて
□投稿者/ pon (4回)-(2011/02/01(Tue) 15:05:33)
アドバイスをいただいたのに、返信が遅くなり申し訳ありません。

まずコンボボックスのDataSourceに何も設定せず(★部分をコメントにして)実行した結果です。
ある一定のところでメモリ使用量は止まります。
209,012
250,564
250,580
250,596
250,600
250,628
250,644
250,660
250,664
250,692
250,696
250,724
250,728
250,756
250,772
250,788
250,792
250,820
250,836
250,852
250,856
250,884
250,900
250,904
250,892
250,904
250,932
250,948
250,952
250,980
250,996
251,012
251,016
251,044
251,060
251,076
251,080
251,108
251,124
251,140
251,144
251,172
251,188
251,204
251,208
251,236
251,252
251,268
251,272
251,300
251,316
251,332
251,336
251,364
251,380
251,396
251,400
251,428
251,444
251,460
251,464
251,492
251,508
251,524
251,528
251,556
251,572
251,588
251,592
251,620
251,636
251,652
251,656
251,684
251,700
251,716
251,720
251,748
251,764
251,780
251,784
251,812
251,828
251,844
251,848
251,876
251,892
251,908
251,912
251,940
251,956
251,972
251,976
252,004
252,020
252,036
252,040
252,068
252,084
252,100
252,104
252,132
252,148
252,164
252,168
252,196
252,212
252,228
252,232
252,260
252,276
252,292
252,296
252,324
252,340
252,356
252,360
252,388
252,404
252,420
252,424
252,452
252,468
252,484
252,488
252,516
252,532
252,548
252,552
252,580
252,596
252,612
252,616
252,644
252,660
252,676
252,680
252,708
252,724
252,740
252,744
252,772
252,788
252,804
252,808
252,836
252,852
252,868
252,872
252,900
252,916
252,932
252,936
252,964
252,980
252,996
253,000
253,028
253,044
253,060
253,064
253,092
253,108
253,124
253,128
253,156
253,172
253,188
253,192
253,220
253,236
253,252
253,256
253,284
253,300
253,316
253,320
253,348
253,364
253,380
253,384
253,412
253,428
253,444
253,448
253,476
253,492
253,508
253,512
253,540
253,556
253,572
253,576
253,604
253,620
253,636
253,640
253,668
253,684
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700
253,688
253,700
253,700
253,700

次にコンボボックスのDataSourceにデータ2行のDataTableを設定し(★部分をコメント解除して)実行した結果です。
1000回続けましたが、メモリ使用量は増え続けます。(記載は300回までです。)
213,828
262,576
262,632
262,712
262,768
262,848
262,916
263,128
263,184
263,264
263,332
263,400
263,456
263,548
263,604
263,672
263,864
264,068
263,972
264,052
264,108
264,188
264,256
264,324
264,364
264,416
264,484
264,564
264,620
264,700
264,768
264,836
264,880
265,664
265,744
265,812
265,868
265,948
266,016
266,084
266,140
266,220
266,288
266,356
266,412
266,492
266,560
266,628
266,656
266,720
266,788
266,868
266,924
267,004
267,072
267,140
267,196
267,276
267,344
267,412
267,468
267,548
267,616
267,672
267,712
267,804
267,872
267,940
267,996
268,076
268,144
268,212
268,268
268,348
268,416
268,484
268,540
270,368
270,272
270,504
270,396
270,476
270,544
270,600
270,680
270,748
270,816
270,896
270,940
271,020
271,088
271,168
271,212
271,292
271,360
271,428
271,484
271,564
271,632
271,700
271,756
271,836
271,904
271,972
272,028
272,108
272,176
272,244
272,300
272,380
272,448
272,516
272,572
272,652
272,720
272,788
272,844
272,924
272,992
273,060
273,116
273,196
273,264
273,332
273,388
273,468
273,536
273,604
273,660
273,740
273,808
273,876
273,932
274,012
274,080
274,148
274,204
274,284
274,352
274,420
274,476
274,556
274,624
274,692
274,748
274,828
274,896
274,964
275,020
275,100
275,168
275,236
275,292
275,372
275,440
275,508
275,564
275,644
275,712
275,780
275,836
275,916
275,984
276,052
276,108
276,188
276,256
276,324
276,380
276,460
276,528
276,596
280,176
280,116
280,196
280,264
280,320
280,400
280,468
280,536
280,592
280,672
280,740
280,808
280,864
280,944
281,012
281,080
281,136
281,216
281,284
281,352
281,408
281,488
281,556
281,624
281,680
281,760
281,828
281,896
281,952
282,032
282,100
282,168
282,224
282,288
282,340
282,392
282,432
282,496
282,548
282,600
282,640
282,704
282,756
282,808
282,848
282,912
282,964
283,016
283,056
283,120
283,172
283,224
283,264
283,328
283,380
283,432
283,472
283,536
283,588
283,640
283,680
283,744
283,796
283,848
283,888
283,940
284,004
284,056
284,096
284,160
284,212
284,404
284,444
284,508
284,560
284,612
284,652
284,716
284,768
284,820
284,860
284,924
284,976
285,028
285,068
285,132
285,184
285,236
285,276
285,340
285,392
285,444
285,484
285,548
285,600
285,652
285,692
285,756
285,808
285,860
285,900
285,964
286,016
286,068
286,108
286,172
286,224
286,276
286,316
286,380
286,432
286,484
286,524
286,588
286,640
286,692
286,732
286,796
286,848
286,900
286,940
287,004
287,056
287,108
287,148
287,212
287,264
287,316

引用返信 編集キー/
■56808 / inTopicNo.9)  Re[6]: コンボボックスのDataSourceについて
□投稿者/ pon (5回)-(2011/02/01(Tue) 15:14:48)
>駄目だとしたらComboBoxのDatasourceを明示的に解放するには後Nothingいれるくらいかな。


またForm2のDisposedイベントで
以下のように2通りのCombobox.DataSouceにNothingを入れて、メモリ使用量を調べてみました。
どちらも結果はメモリ使用量が増え続けます。

パターン1
Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
    Me.ComboBox1.DataSource = Nothing
End Sub

パターン2
Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
    DirectCast(Me.ComboBox1.DataSource, DataTable).Dispose()
    Me.ComboBox1.DataSource = Nothing
End Sub

引用返信 編集キー/
■56810 / inTopicNo.10)  Re[7]: コンボボックスのDataSourceについて
□投稿者/ pon (6回)-(2011/02/01(Tue) 15:30:02)
todoさん

>・Form2を重くする実験
>Me.Tag = New Byte(10000) {}

>・DataTableを重くする実験
>2行→1万行

>・コンボボックスを重くする実験
>comboBox1.Tag = New Byte(10000) {}

以上を試してみました。
現象は変わらず、★部分をコメントアウトするとメモリ使用はある一定で止まります。
★部分を実行するとメモリ使用量は増え続けます。
引用返信 編集キー/
■56812 / inTopicNo.11)  Re[1]: コンボボックスのDataSourceについて
□投稿者/ shu (400回)-(2011/02/01(Tue) 15:43:35)
No56734 (pon さん) に返信

 
> ◆Form1.vb◆
> Public Class Form1
> 
>     Private Sub Form2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Form2ToolStripMenuItem.Click
>         System.GC.Collect()
>         System.GC.WaitForPendingFinalizers()
>         System.GC.Collect()
> 
>         Dim openfrm As Form = New Form2
> 
>         openfrm.MdiParent = Me
>         'openfrm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
>         'openfrm.StartPosition = FormStartPosition.Manual
>         'openfrm.Location = New Point(0, 0)
>         'openfrm.Dock = DockStyle.Fill
>         openfrm.Show()
> 
>     End Sub
> End Class

openfrm.Show()の後に
AddHandler openfrm.FormClosed, AddressOf Form2_Closed
を追加

次を定義
Private Sub Form2_Closed(ByVal sender As Object, ByVal e As EventArgs)
    Dim fm2 = DirectCast(sender, Form)
    fm2.Dispose()
End Sub


これでForm2が閉じたときにDisposeが動きます。


GC.Collectは頻繁に動かさない方がいいです。

引用返信 編集キー/
■56814 / inTopicNo.12)  Re[2]: コンボボックスのDataSourceについて
□投稿者/ pon (7回)-(2011/02/01(Tue) 16:30:18)
Shuさん

Form1のコードを記載いただいたようにしたのですが、メモリ使用量は増え続けます。

Public Class Form1

    Private Sub Form2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Form2ToolStripMenuItem.Click
        'System.GC.Collect()
        'System.GC.WaitForPendingFinalizers()
        'System.GC.Collect()

        Dim openfrm As Form = New Form2
        AddHandler openfrm.FormClosed, AddressOf ChildFormClosed
        openfrm.MdiParent = Me
        'openfrm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        'openfrm.StartPosition = FormStartPosition.Manual
        'openfrm.Location = New Point(0, 0)
        'openfrm.Dock = DockStyle.Fill
        openfrm.Show()      

    End Sub

    Private Sub ChildFormClosed(ByVal sender As Object, ByVal e As Windows.Forms.FormClosedEventArgs)
        DirectCast(sender, Form).Dispose()
    End Sub
End Class

またForm2についてClosedイベントでComboboxのDataSourceにNothingを入れてみても、メモリ使用量は増え続けます。
Public Class Form2

    Private Sub Form2_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.ComboBox1.DataSource = Nothing
    End Sub
   :
  以下略


引用返信 編集キー/
■56816 / inTopicNo.13)  Re[3]: コンボボックスのDataSourceについて
□投稿者/ shu (401回)-(2011/02/01(Tue) 17:33:14)
No56814 (pon さん) に返信

ComboBox1.DataBindings.Clear()
はどう?
引用返信 編集キー/
■56818 / inTopicNo.14)  Re[4]: コンボボックスのDataSourceについて
□投稿者/ やじゅ (1828回)-(2011/02/01(Tue) 18:22:32)
やじゅ さんの Web サイト
No56814 (pon さん) に返信

.NET2003でウィンドウズアプリを開発している時に、フォームを開閉(MDIでは無い)を繰り返すと
メモリ使用量が増えて最終的にはリソース不足になってしまう不具合がありました。

同僚がDevPartnerのツールで調べるとフォームのコントロールのメモリが解放されていないようでした。
明示的にCloseイベントで全てのコントロールに対し、Nothingをすることで対処しました。
本来はFormのDispose()することで解放されるはずなんですが…

WindowsMobileですが… 似た現象のようです、一応参考までに。
WindowsMobile上のC#アプリのメモリリークを解決せよ!
http://www.swk623.com/archives/2009/03/net-windowsmobi.html

引用返信 編集キー/
■56819 / inTopicNo.15)  Re[5]: コンボボックスのDataSourceについて
□投稿者/ todo (111回)-(2011/02/01(Tue) 18:29:16)
2011/02/01(Tue) 20:06:25 編集(投稿者)

>1000回続けましたが、メモリ使用量は増え続けます。(記載は300回までです。)

平均で1回52byteですね。
ComboBox内部で使用しているインスタンスが残ってしまうのでしょう。
52byteのクラス名を知りたいのであれば、CLRプロファイラというツールがあります。
http://msdn.microsoft.com/ja-jp/magazine/ee309515.aspx

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -