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

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

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

全過去ログを検索

<< 0 >>
■30325  Re[6]: C++/CLIでメモリ解放が遅い
□投稿者/ あしび -(2008/12/21(Sun) 11:18:59)
    No30324 (Azulean さん) に返信

    > 「Dispose(デストラクタ)が必ず呼ばれる」ならOKですが、「Dispose(デストラクタ)が呼ばれなくても、ファイナライザが呼ばれるから大丈夫」ならNGです。

    両方に同じ解放内容を定義してあるので、タイミングが選べなくても(いつかは)必ずアンマネージリソースが解放されるという意味でした。
    (多重解放にはならないようにしてあります。)
    ただ、C#から見ればDisposeを呼ぶのが正しいでしょうし、C++/CLIでは解放したいタイミングでdeleteすべきです。
    テスト環境では必ず呼ばれるようにしてテストしています。

    > # Disposeはあくまでアンマネージリソースの解放タイミングを与えるものですので、マネージオブジェクトが巨大な場合は効果が薄いかも知れません。

    上記のことをふまえると、ご意見の通りのような気がします。
    マネージオブジェクトの解放の仕方がC++/CLIではDllImportを用いた場合やマネージドC++の場合とで違うということかもしれません。
    (もしくはメモリ展開状態が違うというか・・・)
    PagedMemorySize64プロパティも含めて、C++/CLIでメモリ状態がどうなるのかもっとよく理解すべきですね。

    > ところで、サンプルではデストラクタがファイナライザのコードを呼んでいますが、意味合いとしては分けた方が良いと思います。
    > マネージオブジェクトの解放順は保障されていないため、コードの書き方によっては意図せぬ動作をする可能性があります。
    > http://msdn.microsoft.com/ja-jp/library/system.object.finalize.aspx

    参考ページありがとうございます。
    唯一出版されているC++/CLI本にこうするといいよ、と記載されていたのを参考にしたのですが(笑)
    鵜呑みにしていて、まだまだ理解が足りていないような気がしてきました。
    自分の状況に合っているのかもう一度確認したいと思います。

    どうやら、同じような現象に陥った方もいらっしゃないようですし、自分のメモリ管理に対する知識が足りていないということがわかりました。
    C++/CLIのメモリ管理をもっと調べる必要がありそうですね。
    一旦閉じさせていただきます。
    何か結果がわかったら追加記載させてください。

    とても勉強になりました。
    それから、できることがありそうに思えて、少し気が楽になりました。
    どうもありがとうございました。

記事No.30301 のレス / END /過去ログ54より / 関連記事表示
削除チェック/

■55378  Re[3]: クラス間で大量のパラメタをやりとりする
□投稿者/ Azulean -(2010/11/29(Mon) 07:16:31)
    こういうガイドラインも公開されています。
    http://msdn.microsoft.com/ja-jp/library/ms229017.aspx

    No55372 (shu さん) に返信
    > 構造体をそのまま渡す場合はコピーが作成されるので気をつけなければいけませんが
    > 今回の場合list(of 〜)によってわたされるので問題はないかと思います。

    List(Of T) に追加するとき、List(Of T) から参照するときにコピーされます。
    この挙動からまったく問題がないとは言えないと思っています。(程度の差はありますが)

    ちなみに、配列の場合は別の挙動をします。
記事No.55366 のレス /過去ログ93より / 関連記事表示
削除チェック/

■59188  Re[1]: データベース取得で例外発生
□投稿者/ Gyackt -(2011/05/18(Wed) 14:57:39)
    No59187 (あるしす さん) に返信
    > はじめまして!C#の初心者です。
    >
    > C#でデータベースの取得をしようとした所、訳の分からない例外が発生して困っています。
    > どなたか解かる方、解決方法を教えてください。
    >
    > 開発環境は、WindowsXP、Visual studio2008(SP1)です。
    > 発生している例外は TypeInitializationException で、例外ヘルパの説明は
    > 'System.Transactions.Diagnostics.DiagnosticTrace' のタイプ初期化子が例外をスローしました。
    > と表示されます。
    >
    > 発生箇所は、以下に記述するソースのmyDataAdapter.Fill()の部分です。
    > 但し、myDataAdapter.Fill()にブレークポイントを設定し、一旦ブレークした後に続行すると例外は発生しません。
    >
    >
    > ■ソース
    > using System;
    > using System.Data;
    > using System.Data.OleDb;
    > using System.Xml.Serialization;
    >
    > public class MainClass
    > {
    >   public static void Main ()
    >   {
    >     string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=RoraData.mdb";
    >     string strAccessSelect = "SELECT * FROM RoraType";
    >     DataSet myDataSet = new DataSet();
    >
    >     OleDbConnection myAccessConn = null;
    >     try
    >     {
    >       myAccessConn = new System.Data.OleDb.OleDbConnection(strAccessConn);
    >     }
    >     catch(Exception ex)
    >     {
    >       Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
    >       return;
    >     }
    >
    >     try
    >     {
    >       OleDbCommand myAccessCommand = new System.Data.OleDb.OleDbCommand(strAccessSelect, myAccessConn);
    >       OleDbDataAdapter myDataAdapter = new System.Data.OleDb.OleDbDataAdapter(myAccessCommand);
    >       myDataAdapter.Fill(myDataSet,"RoraType");
    >     }
    >     catch (Exception ex)
    >     {
    >       Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
    >       return;
    >     }
    >
    > //    ★★ 以下省略 ★★
    >   }
    > }
    >
    > 以上、よろしくお願いします。

    調査不足じゃないかな
    http://www.connectionstrings.com/access

    あと「データベースを取得」っておかしい
記事No.59187 のレス /過去ログ99より / 関連記事表示
削除チェック/

■68192  Re[1]: GridViewのDropDownListの行番号
□投稿者/ WebSurfer -(2013/09/30(Mon) 08:44:19)
    No68191 (5Remedy さん) に返信
    > 2013/09/30(Mon) 02:14:42 編集(投稿者)
    >
    > asp.net(VB)でGridViewにDropDownListを埋めこんでいます。
    >
    > DropDownlistの項目が(0,1,2,3)の4つあり、
    > 3を選択されたら無効と判断し、前の値(bkValue)に戻すということを実現したいです。
    >
    > 前回の値(bkValue)は行(レコード)毎に配列で保存しています。
    >
    > 前回値(bkValue)に戻す時に、前回値の配列のINNDEXを指定する為どこの行なのか知りたいのですがどう書けばいいのか分かりません。
    > 項目が変更されたDropDownListの行数を知ることは可能でしょうか?
    >
    > ソースはDropDownListのSelectedIndexChanged内で以下のようにコーディングしています。
    >
    > Protected Sub DropDownList2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    > If DirectCast(sender, DropDownList).SelectedIndex = 3 Then
    > DirectCast(sender, DropDownList).SelectedIndex = bkValue(?) ←何行目のDropDownListの前回値か分からない?
    > End If
    >
    > GridViewのイベントなら、e.RowIndexで取得できるみたいですが、DropDownListの上記イベントではeのメンバにRowIndexがありませんでした。
    > よろしくお願いいたします。
    >

    いろいろ不明点が多すぎるのでハズレかもしれませんが・・・

    GridView.EditIndex プロパティから取得できませんか?



    回答者は、掲示板に書いてある情報以外は何も知り得ないという認識
    を持って、どのような情報を提供すれば回答者が質問者さんの状況を
    的確に把握でき、的を得た回答ができるかよく考えた上で質問を書い
    ていただければと思います。

    どのような情報を提供すればいいかというと、例えば:

    そもそも、ユーザー入力に DropDownList を使う目的は、無効な値を
    入力できないようにすることによってユーザビリティを高めることだ
    と思いますが、何故、今回、無効な値を選択できるようにするのでし
    ょうか? まず、そのあたりから説明されると、より的を得た回答が
    得られると思います。

    GridView のある行を編集モードにすると DropDownList が表示され
    るのだと想像してますが、そのあたり何も書いてありません。

    どのようにしてポストバックしているのでしょうか? DropDownList
    の AutoPostBack を使うのと、GridView の各行に配置した Button
    を使うのとでは RowIndex の取得方法が違ってきます。

    また、「前回の値(bkValue)」とは何か、「行(レコード)毎に配列で
    保存」とありますが、具体的にどうやっているのか(そもそも、VB.NET
    の配列では保存できないはず・・・ViewState に保存しているのか?)
    もよく分かりません。
記事No.68191 のレス /過去ログ116より / 関連記事表示
削除チェック/

■83346  文字列を出力した際のプレフィックス
□投稿者/ にんく -(2017/03/18(Sat) 17:32:45)

    分類:[.NET 全般] 

    http://wiz.came.ac/blog/2009/10/binarywriter.html

    この記事にもある通り、
    BinaryWriterで文字列をバイナリファイルに出力し、
    BinaryReaderで読み込むと、出力した文字列の頭に
    プレフィックスというものが付け加えて出力されます。

    このプレフィックスの使い道を教えてください。
    テキストエディタで開く時に必要になるのでしょうか?

    BinaryWriterでプレフィックスを付けずに
    文字列を出力する方法があれば教えてください。






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

■98259  Re[1]: C#の例外処理
□投稿者/ 魔界の仮面弁士 -(2021/10/25(Mon) 13:19:26)
    No98257 (Megumi さん) に返信
    > 以下のコードではフォームに貼り付けた Pb(PictureBox)に画像が読み込まれていないと例外が発生します。

    NullReferenceException は例外処理で拾って処理するものでは無く、
    開発者側で「そもそも発生させないように気を配る」類の代物なので、
    この場合は「Pb に画像が読み込まれているかどうか」を調べるべきかと思います。


     Bitmap canvas = new Bitmap(Pb.Width, Pb.Height);
     Pb.Image = canvas;
     Image img = Pb.Image;
     if (img != null) // 画像が読み込まれているか?
     {
      using (img)
      using (Graphics g = Graphics.FromImage(canvas))
      {
       g.TranslateTransform(120, 0);//ワールド変換行列を右に平行移動する
       g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
      }
     }


    > finally
    > {
    >  g.Dispose();  //これは OK なのに
    >  img.Dispose(); //現在のコンテキストに img という名前は存在しないコンパイルエラーが出る!
    >  Pb.Image = canvas;
    > }

    んんん……!? 『img という名前は存在しない』というエラーではなく、
    『未割り当てのローカル変数 'img' が使用されました。』ではありませんでしたか?

    g 変数の方は、代入行為が try 句の外で行われているので、
    g.Dispose() に到達した時点では、g が初期化済みであることが明確です。

    一方で img 変数は、try 句の「img = Pb.Image;」という代入行為が失敗していた場合において、
    変数の中身が、null さえもセットされていない状態ということになります。
    そのようなオブジェクトを操作することは許可されないため、未割当を示す CS0165 エラーになるはず。
記事No.98257 のレス /過去ログ170より / 関連記事表示
削除チェック/

■98260  Re[2]: C#の例外処理
□投稿者/ Megumi -(2021/10/25(Mon) 14:41:59)
    No98259 (魔界の仮面弁士 さん) に返信

    > NullReferenceException は例外処理で拾って処理するものでは無く、
    > 開発者側で「そもそも発生させないように気を配る」類の代物なので、
    > この場合は「Pb に画像が読み込まれているかどうか」を調べるべきかと思います。

     すばやい回答まことにありがとうございました。そういうものなのですね。


    > んんん……!? 『img という名前は存在しない』というエラーではなく、
    > 『未割り当てのローカル変数 'img' が使用されました。』ではありませんでしたか?
     その通りでした。

     実は一週間ほど前、Visual Studio 2019 をダウンロードし、手探り状態で動かしています。プログラミングは20年ぶりくらいですので完全な浦島状態です(笑)。アドバイスは大変助かります。774RRさんにもお礼申し上げます。
記事No.98257 のレス / END /過去ログ170より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -