- PR -

メモリ不足になるのでしょうか

投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2007-09-28 14:14
こんにちは。

VB2005の質問です。

おかしな質問かも知れませんが、教えて下さい。

テキストボックスでコードを入力したら名前をラベルにセットする処理です。
Ds.Tables(0).Rows(0)("名前")でセットしています。

コード入力_Validating

Dim Ds As New DataSet

Ds = gDs(DataSetを返すクラス)

ラベル = Ds.Tables(0).Rows(0)("名前")


そこでお聞きしたいのが
このコード入力を何度も行った場合 Dim Ds As New DataSet
とコーディングしていますので

入力 戻り 再入力
を繰り返した場合 Dim Ds As New DataSetによって
メモリ不足とかにならないのか教えて下さい。

またDataSetを破棄する必要があるのですか?

宜しくお願いします。

囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-09-28 14:31
ガベージコレクションが勝手に解放してくれるので放置でよいですが、そもそも
Ds = gDs(DataSetを返すクラス)
で DataSet を取得しているので、New する必要は全くないでしょう。
_________________
囚人のジレンマな日々
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2007-09-28 15:28
msoです。

引用:

なびさんの書き込み (2007-09-28 14:14) より:
このコード入力を何度も行った場合 Dim Ds As New DataSet
とコーディングしていますので

入力 戻り 再入力
を繰り返した場合 Dim Ds As New DataSetによって
メモリ不足とかにならないのか教えて下さい。

またDataSetを破棄する必要があるのですか?

宜しくお願いします。




何度も何度も繰り返しやればいつかはメモリ不足にはなると思います。

そんなことを気にするよりも「常に使ったものは片付ける」の精神で
メモリを破棄すればよろしいと思います。
using使えば意識しなくてもいいので、便利ですよ。


まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-09-28 15:50
引用:

何度も何度も繰り返しやればいつかはメモリ不足にはなると思います。



...囚人さんの書込みで正しいです。

引用:

using使えば意識しなくてもいいので、便利ですよ。



usingとメモリ(マネージリソース)の解放は別問題です。
確かに DataTable に Dispose は実装されているけれども。。。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-09-28 15:58
引用:

msoさんの書き込み (2007-09-28 15:28) より:

何度も何度も繰り返しやればいつかはメモリ不足にはなると思います。


そうなのでしょうか?

コード:

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        For i As Integer = 0 To 10000
            Me.OneMethod()
        Next
    End Sub

    Private Sub OneMethod()
        Dim ds As New System.Data.DataSet()

        ds = Me.GetDataSetMethod()

        Me.Label1.Text = ds.Tables(0).Rows(0)(0).ToString()
    End Sub

    Private Function GetDataSetMethod() As System.Data.DataSet
        Using connection As New System.Data.SqlClient.SqlConnection("Data Source=Server; Initial Catalog=NorthWind; Integrated Security=SSPI;")
            Using command As New System.Data.SqlClient.SqlCommand("SELECT * FROM Employees", connection)
                Using dataAdapter As New System.Data.SqlClient.SqlDataAdapter(command)
                    Dim dataSet As New System.Data.DataSet()
                    dataAdapter.Fill(dataSet)

                    Return dataSet
                End Using
            End Using
        End Using
    End Function



引用:

そんなことを気にするよりも


気にしているからこその質問だと思うのですが、これはどういう意味合いなのでしょうか?

引用:

「常に使ったものは片付ける」の精神で
メモリを破棄すればよろしいと思います。
using使えば意識しなくてもいいので、便利ですよ。


Using ステートメントでメモリが破棄できるのでしょうか? 初めて聞きました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2007-09-28 16:42
ご返答ありがとうございます。

「ガベージコレクションが勝手に解放してくれるので放置でよいですが」
 
 によって気にすることはないのですよね。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-09-28 19:20
引用:

「ガベージコレクションが勝手に解放してくれるので放置でよいですが」
 
 によって気にすることはないのですよね。



Yes ですが、何故そうなのかという理由は知っておいた方が良いと思います。 Using 句等含めてこの際に学習されてみては?
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-09-28 20:58
引用:

囚人さんの書き込み (2007-09-28 14:31) より:
ガベージコレクションが勝手に解放してくれるので放置でよいですが、そもそも
Ds = gDs(DataSetを返すクラス)
で DataSet を取得しているので、New する必要は全くないでしょう。



囚人さんのこの指摘の意味は理解されたんでしょうか?
こういうコードを書いてしまうということは、
インスタンスとか、参照型とか、基本的な部分を理解されていないんだと思います。
解放とかUsingより前にそちらを勉強されたほうがよいと思います。

スキルアップ/キャリアアップ(JOB@IT)