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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■51728  Re[2]: DataGridViewの垂直スクロールバーを無効にしたい
□投稿者/ joji -(2010/07/15(Thu) 09:18:08)
    No51721 (やじゅ さん) に返信
    > ScrollBarsプロパティをBoth→Horizontal にするとかっていう単純な方法ではなくて・・・?
    > Both(垂直、水平両方のスクロールバーを表示)初期値
    > Vertical(垂直スクロールバーのみ表示)
    > Horizontal(水平スクロールバーのみ表示)

    やじゅさん。
    ありがとうございました。
    正常に動作しました。

    よく自分で調べればわかることでした。
    今後、気を付けます。
記事No.51716 のレス / END /過去ログ87より / 関連記事表示
削除チェック/

■55525  Re[5]: エクセルのVBAにてデータを整理したい
□投稿者/ 魔界の仮面弁士 -(2010/12/05(Sun) 15:20:03)
    No55524 (りぃ さん) に返信
    >> VBAならReplace
    >>  Replace("ab-c","-","") => abc
    > Replace関数は私のエクセル(2007)では対応していませんでした。

    もしかして、ワークシート関数と勘違いしておられませんか?


    > (正確には、関数の型が違っていたようです)
    Excel 2007 であれば、
      『VBA の Replace 関数』
      『ワークシート関数 REPLACE』
    のいずれも使えます。戻り値の型は、VBA 版/ワークシート関数版ともに「文字列型」です。
    ちなみに VBA 版の Replace は、Excel 2000 からの対応です(Excel 97 では不可)。

    引数については、ワークシート関数の方は、引数が4つで
     文字列「置換元のデータ」
     数値 「開始位置」
     数値 「置換する文字数」
     文字列「置き換える文字列」
    となっています。

    一方、VBA 版の方は、引数が3〜6個で
     文字列「置換元のデータ」
     文字列「置き換わる検索文字列」
     文字列「置き換える置換文字列」
     整数 「置換する際の開始位置(省略時は1)」
     整数 「置き換える回数(省略時は全候補を置換)」
     列挙値「比較方法(省略可)…VbCompareMethod」
    です。
記事No.55360 のレス /過去ログ93より / 関連記事表示
削除チェック/

■83760  メモリのキャッシュをクリアする方法
□投稿者/ バジャイ -(2017/04/07(Fri) 11:05:41)

    分類:[.NET 全般] 



    VB.NETで作成したコードで
    ストレージからの読み込みも考慮に入れて
    実行速度を比較したい場合に、
    メモリのキャッシュを毎回クリアして実行する必要があります。

    いつもはRAMMapというフリーソフトを使って
    クリアしているのですが
    VB.NETでメモリをクリアできる
    プログラムコードがございましたら
    教えてください。






親記事 /過去ログ143より / 関連記事表示
削除チェック/

■91530  Re[6]: メモリリークに関して
□投稿者/ 魔界の仮面弁士 -(2019/07/03(Wed) 19:37:39)
    No91528 (kiku さん) に返信
    > その結果をどのように掲示板に報告するのが良いのか
    > ソースの内容を理解できていないため、
    > わかりませんでした。

    とりあえず、Compact か否かで結果が異なるという程度の理解でも可ということで。
    Fx と CFx で結果が異なることを確認しておきたかっただけです。
    (これも逆アセンブル扱いになるのだろうか…?)


    .NET Framework の場合、Reference Source を見れば、
    Form.Dispose(bool) が実装されていて、
    その中で、ContainerControl.Dispose(bool) が呼ばれていることがわかります。
    そしてそれが、Control.Dispose(bool) を呼び出していることも。
    https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Form.cs,3793


    一方 .NET Comapct Framwork の場合、ソースコードは提供されていませんが、
    No91525 の実験結果から、Form.Dispose(bool) は特に存在しておらず、
    直接 Control.Dispose(bool) がそのまま呼ばれていることが確認できました。



    No91529 (魔界の仮面弁士) に追記
    > あと、経験則的なところで言えば、.NET Compact Framework 環境の場合、
    > オブジェクトの使用後は、参照変数に Nothing 代入を積極的に行った方が良いみたいです。

    Nothing の代入有無で、本当に解放状況が変化するかどうかを確認してみました。


    端末を再起動して、空きメモリが十分に確保されている状態において、
    Button1 でモードレス フォームを表示させた後、
    Button2 でそれを Close させています。

    すると、Close 直後の ★の行の Nothing 代入がコメントアウトされていた場合、
    Form2 および LabelEx が直ちに Dispose されないケースが確認できました。

    しかし Nothing 代入するようにした場合は、Button2 の時点ですぐに Dispose されるようになりました。


    Partial Public Class Form1
      Inherits Form

      Private f As Form2 = Nothing

      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        f = New Form2()
        f.Show()
      End Sub

      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If f IsNot Nothing AndAlso Not f.IsDisposed Then
          f.Close()
          'f.Dispose()

          'f = Nothing  '★
        End If
      End Sub
    End Class

    Public NotInheritable Class LabelEx
      Inherits Label
      Public ReadOnly Id As Long
      Public Sub New()
        Id = Now.Ticks
        Trace.WriteLine(String.Format("==> {0} 生成 {1}", MyClass.GetType().Name, Id))
      End Sub
      Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        MyBase.Dispose(disposing)
        Trace.WriteLine(String.Format("<== {0} 破棄 {1} ({2})", MyClass.GetType().Name, Id, disposing))
      End Sub
    End Class

    Partial Public Class Form2
      Inherits Form
      Public ReadOnly Id As Long
      Public Sub New()
        Id = Now.Ticks
        InitializeComponent()
        Trace.WriteLine(String.Format("==> {0} 生成 {1}", MyClass.GetType().Name, Id))
      End Sub
      Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)
        Controls.Add(New LabelEx() With {.Text = .Id.ToString()})
        SendToBack()
      End Sub
      Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Disposed
        Trace.WriteLine(String.Format("<== {0} 破棄 {1}", MyClass.GetType().Name, Id))
      End Sub
      Protected Overrides Sub OnDoubleClick(ByVal e As System.EventArgs)
        MyBase.OnDoubleClick(e)
        Close()
      End Sub
    End Class



    ただ、何度も実験を繰り返すと空きメモリが減ってくるようで、
    その場合はどうやら GC が発動するらしく、Nothing 代入せずとも
    Dispose される結果になるようです。
記事No.91509 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91534  Re[7]: メモリリークに関して
□投稿者/ 魔界の仮面弁士 -(2019/07/04(Thu) 09:13:04)
    No91530 (魔界の仮面弁士) に追記
    >>あと、経験則的なところで言えば、.NET Compact Framework 環境の場合、
    >>オブジェクトの使用後は、参照変数に Nothing 代入を積極的に行った方が良いみたいです。
    > Nothing の代入有無で、本当に解放状況が変化するかどうかを確認してみました。


    すみません!
    C# の質問に、うっかり VB で回答してたことに、今朝になって気がつきました。

    # .NET 対応前、CE アプリを eVB3 で行ってきた期間が長すぎて、
    # CE 環境だと反射的に VB で書く癖が…。orz


    > 端末を再起動して、空きメモリが十分に確保されている状態において、
    > Button1 でモードレス フォームを表示させた後、
    > Button2 でそれを Close させています。
    > すると、Close 直後の ★の行の Nothing 代入がコメントアウトされていた場合、
    > Form2 および LabelEx が直ちに Dispose されないケースが確認できました。

    上記の「Close 後、直ちに Dispose されていない」現象ですが、
    改めて C# (CFx 3.5 SP1) でも実験してみたところ、上記の状況を再現させられませんでした。
    Close されたら、null を代入せずとも即座に Dispose されているようにみえる…。


    改めて、昨日の VB コードでも再検証してみましたが、
    昨日と比べて問題の再現率が大幅に低下していました。
    狙って再現させることは難しそうです。


    public partial class Form1 : Form
    {
      private Form2 f = null;
      public Form1()
      {
        InitializeComponent();
        DoubleClick += delegate { Close(); };
      }

      /// <summary>新規に Form2 を表示するコード</summary>
      private void button1_Click(object sender, EventArgs e)
      {
        f = new Form2();
        f.Show();
      }

      /// <summary>直前に表示された Form2 を閉じるコード</summary>
      private void button2_Click(object sender, EventArgs e)
      {
        if (f != null /* && !f.IsDisposed */)
        {
          f.Close();
          // f = null; // ★
        }
      }
    }

    // -=-=-=-=-=-=-=-=-=-=-=-=-

    public partial class Form2 : Form
    {
      private readonly Guid Id = Guid.Empty;
      public Form2()
      {
        Id = Guid.NewGuid();
        Trace.WriteLine(String.Format("==> {0} 生成 {1}", GetType().Name, Id));
        InitializeComponent();
        Controls.Add(new LabelEx());
        Text = Id.ToString();
        DoubleClick += delegate { Close(); };
        // Disposed += delegate { Trace.WriteLine(string.Format("<== {0} 破棄 {1}", GetType().Name, Id)); };
      }
      public sealed class LabelEx : Label
      {
        private readonly Guid Id;
        public LabelEx()
        {
          Id = Guid.NewGuid();
          Trace.WriteLine(String.Format("==> {0} 生成 {1}", GetType().Name, Id));
          Text = Id.ToString();
          //Disposed += delegate { Trace.WriteLine(string.Format("<== {0} 破棄 {1}", GetType().Name, Id)); };
        }
        protected override void Dispose(bool disposing)
        {
          Trace.WriteLine(string.Format("<== {0} 破棄 {1} ({2})", GetType().Name, Id, disposing));
          base.Dispose(disposing);
        }
      }
      protected override void Dispose(bool disposing)
      {
        Trace.WriteLine(string.Format("<== {0} 破棄 {1} ({2})", GetType().Name, Id, disposing));
        if (disposing && (components != null))
        {
          components.Dispose();
        }
        base.Dispose(disposing);
      }
    }
記事No.91509 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91533  Re[7]: メモリリークに関して
□投稿者/ kiku -(2019/07/04(Thu) 09:08:37)
    No91530 (魔界の仮面弁士 さん) に返信
    > 一方 .NET Comapct Framwork の場合、ソースコードは提供されていませんが、
    > No91525 の実験結果から、Form.Dispose(bool) は特に存在しておらず、
    > 直接 Control.Dispose(bool) がそのまま呼ばれていることが確認できました。

    だとすると、
    子コントロールは明示的にDisposeしなくても良く、
    子コントロールが保持するFontなどのアンマネージリソースのみをDisposeすれば良いのでしょうか?

    > Nothing の代入有無で、本当に解放状況が変化するかどうかを確認してみました。
    > 端末を再起動して、空きメモリが十分に確保されている状態において、
    > Button1 でモードレス フォームを表示させた後、
    > Button2 でそれを Close させています。
    > すると、Close 直後の ★の行の Nothing 代入がコメントアウトされていた場合、
    > Form2 および LabelEx が直ちに Dispose されないケースが確認できました。
    > しかし Nothing 代入するようにした場合は、Button2 の時点ですぐに Dispose されるようになりました。
    > ただ、何度も実験を繰り返すと空きメモリが減ってくるようで、
    > その場合はどうやら GC が発動するらしく、Nothing 代入せずとも
    > Dispose される結果になるようです。

    そうすると、子コントロールは明示的にDisposeを行って、
    子コントロールにnull(今回C#なため)を設定し、
    子コントロールが保持するアンマネージリソースに対しても明示的にDisposeを行い、
    その参照もnullに設定するのが良さそうと理解しました。
記事No.91509 のレス /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -