goo blog サービス終了のお知らせ 

旅人にゃんたの道中記!

ニャッース!!

【C#リンク集】

2007-05-10 00:44:35 | C#(´・ω・`)
Update:2007/05/10

CL★CLRプロファイラ for .NET 2.0 00:39
URI:http://www.microsoft.com/downloads/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&DisplayLang=en
★使い方
How To 情報: CLR プロファイラの使用方法
URI:http://www.microsoft.com/japan/msdn/enterprise/pag/scalenethowto13.aspx
リークが発生するアプリケーションのデバッグ:マネージ コードでのメモリ リークの識別と回避
URI:http://msdn.microsoft.com/msdnmag/issues/07/01/ManagedLeaks/default.aspx?loc=jp#S1


@IT:連載:.NETで簡単XML
URI:http://www.atmarkit.co.jp/fdotnet/easyxml/index/index.html


@IT:改訂版C#入門
URI:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/


@IT:.NET逆コンパイラとコードを難読化するDotfuscator
http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/dotfuscator_02.html

【チューニング】CLR2.0用のプロファイラ~

2007-05-10 00:40:53 | C#(´・ω・`)
.Net2.0用の「CLRプロファイラ」があったのでメモしておきます。

これを使うと、オブジェクトの寿命や、GCヒープの中を見ることができます。
使いこなせればメモリリークを起こしている箇所の確認とかに役立ちそうです。


★「CLRプロファイラ for .NET 2.0 00:39」は下記リンク先からDLできます。
http://www.microsoft.com/downloads/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&DisplayLang=en

★使い方や、基本知識は以下MSのサイトから入手。
http://www.microsoft.com/japan/msdn/enterprise/pag/scalenethowto13.aspx
http://msdn.microsoft.com/msdnmag/issues/07/01/ManagedLeaks/default.aspx?loc=jp#S1

★関連参考サイト
 

連載
@IT
.NET&Windows Vistaへ広がるDirectXの世界
第6回 .NETアプリを軽快にするためのガベージ・コレクション講座
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_01.html
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_02.html

【C#2.0】 [?]を使うための調査メモ…その1

2007-02-18 23:40:31 | C#(´・ω・`)
[?]を使用したポップアップヒント。
・[?]クリックと[F1]キー押下のタイミングは、
 HelpRequestedイベント(ユーザがコントロールヘルプを表示するときに発生するイベント)
 で拾えるので、ヘルプを表示するコントロールに対して、
 HelpRequestedイベントハンドラを実装します。

ex:
 private void button1_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent)
 {
  // ポップアップ・ヘルプを表示する
  ShowPopupHelp(button1);
  // HelpRequestedイベントを処理済みに設定する
  hlpevent.Handled = true;
 }

参考サイト:@IT:.Net Tips > 任意の位置にポップアップ・ヘルプを表示するには?

【C#2.0】 List<T>.FindAll(Predicate<T>)

2006-10-28 01:27:25 | C#(´・ω・`)
List.FindAll メソッド は、
「指定された述語によって定義された条件と一致するすべての要素を取得します。」(Helpより抜粋)
と言う動きをするらしいです。

従来ならば、foreachでぐるぐる回して判定すればよいが、
C#2.0より、匿名メソッドでの検索機能が備わったので使ってみることにしたっぴ。


処理概要:List<T>から、ある値が一致するオブジェクトのみを、Listで取得してみる。



//メインクラス。
  static class Program
  {
    [STAThread]
    static void Main()
    {
      //HogeModelを作る。
      List<HogeModel> lsHoge = new List<HogeModel>();

      for (int i = 0; i < 100; i++)
      {
        HogeModel mdl = new HogeModel();
        mdl.Code = i.ToString();
        mdl.Name = "Name_" + i.ToString();
        lsHoge.Add(mdl);
      }

      //lsHogeから、検索したいHogeModelの値を設定します。
      HogeModel mdlTarget = new HogeModel();
      mdlTarget.Code = "50";

      //HogeModelの比較クラスを作成。
      TargetChecker tesChecker = new TargetChecker(mdlTarget);
      Predicate<HogeModel> pdCheck = new Predicate<HogeModel>(tesCheck.CodeEqual);

      //lsHogeから、該当するObjectを全て別配列にコピーします。
      List<HogeModel> kore = lsHoge.FindAll(pdCheck);


      foreach (HogeModel mdl in kore)
      {
        System.Console.WriteLine(mdl.Code);
      }
    }
  }


  //HogeModel
  public class HogeModel
  {
    private string m_name;
    private string m_code;

    public string Name
    {
      get { return _name; }
      set { _name = value; }
    }

    public string Code
    {
      get { return _code; }
      set { _code = value; }
    }
  }

  /// <summary>
  /// List<HogeModel>から、セットされた HogeModelと、一致するかどうかの判定を返すメソッドを実装するクラス。
  /// </summary>
  public class TargetChecker
  {
    private HogeModel m_mdl;

    public TargetChecker(HogeModel mdl)
    {
      m_mdl = mdl;
    }

    //HogeModelの判定用の匿名メソッドです。
    public bool CodeEqual(HogeModel mdl)
    {
      if (m_mdl.Code.Equals(mdl.Code))
        return true;
      else
        return false;
    }
  }

【C#2.0】 MemoryStream

2006-10-24 00:24:13 | C#(´・ω・`)
MemoryStreamを使ってみるテスト




  /// <summary>
  /// DataItemのXML化を行うテストクラスです。
  /// </summary>
  public class SimpleTest4
  {
    public void Test()
    {
      GiC.Model.DataItem dlist = new GiC.Model.DataItem();

      for (int i = 0; i <6; i++)         GiC.Model.DataValue dvTmp = new GiC.Model.DataValue();
        dvTmp.Type = "hoge" + i;
        dvTmp.Value = "value" + i;
        dlist.Add(dvTmp);
      }
      //内容を出力
      dlist.Dump();

      OutPutTest4 tesOutput = new OutPutTest4();
      tesOutput.ExportXML(dlist);

    }
  }
  /// <summary>
  /// DataItemの出力テストを行います。
  /// </summary>
  public class OutPutTest4
  {
    public void ExportXML(GiC.Model.DataItem dlist)
    {
      //シリアライズするオブジェクトのタイプを指定します。
      XmlSerializer xmlSeria = new XmlSerializer(dlist.GetType());

      using(MemoryStream ms = new MemoryStream())
      {

        //MemoryStreamにXMLを出力します。
        xmlSeria.Serialize(ms, dlist);
        ms.Position = 0;  //読み取り位置を初期化する。
        ms.Seek( 0, SeekOrigin.Begin );

        //MemoryStreamをUTF-8で出力します。
        System.Diagnostics.Debug.WriteLine(Encoding.UTF8.GetString(ms.GetBuffer()));

        //Fileに書き出す。
        using (FileStream fs = new FileStream(@"C:hoge.txt", FileMode.Create, FileAccess.ReadWrite))
        {
          foreach (byte byt in ms.GetBuffer())
            fs.WriteByte(byt);
        }

        //StreamReaderで開く。
        using(StreamReader sr = new StreamReader(ms, Encoding.GetEncoding("UTF-8")))
        {
          string line = "";
          while ((line = sr.ReadLine()) != null)
          {
            Console.WriteLine(line);
          }

        }
      }
    }



■オブジェクトのXMLでシリアライズ/デシリアライズ
.NetでXMLのシリアライズ、デシリアライズ化

【Testツール】 NUnit2.0

2006-10-18 21:27:55 | C#(´・ω・`)

VS2005の標準のテストツールを使わないで、NUnit2.0を使ってみました。

NUnitは下記公式サイトからDLできます。
NUnit公式サイト

また、下記サイトも参考になります。
@IT:NAgileで始める実績アジャイル開発



1) Test用のプロジェクトを作成します。
2)作成したTest用プロジェクトの参照設定に、テストしたいプロジェクトを加えます。
3)次に、NUnitのnunit.framework.dllを参照設定に加えます。
  C:\Program Files\NUnit-Net-2.0 2.2.8\bin\nunit.framework.dll
4)テスト用のクラスを作成します。
  以下のような感じで作成する。。。。

using System;

//!ネームスペースにNUnitFrameworkを追加する。
using NUnit.Framework;


namespace NUnitTest.TestHoge
{
  //!Test用のクラスの先頭に、[TestFixture]をセットします。
  [TestFixture]
  public class TestClass
  {
    //!Testするメソッドの先頭に、[Test]をセットします。
    [Test]
    public void HogeTest()
    {
      HogeClass tesClass = new HogeClass();

      //戻り値が一致するかチェックするテスト。
      tesClass.Add("Hoge");
      Assert.AreEqual("Hoge", tesClass.GetString());

      //エラーになるパターン。
      tesClass.Add("Hoge");
      Assert.AreEqual("Hoge", tesClass.GetString());
    }

  }


  /// <summary>
  /// Hogeを返すクラス。。
  /// </summary>
  public class HogeClass
  {

    private System.Text.StringBuilder m_sbHoge;

    public HogeClass()
    {
      this.m_sbHoge = new System.Text.StringBuilder();
    }

    public void Add(string str)
    {
      this.m_sbHoge.Append(str);
    }

    public string GetString()
    {
      return this.m_sbHoge.ToString();
    }
  }
}


5)Test用のプロジェクトをビルドし、DLLかEXEファイルを作成します。

6)NUnitを起動し、「Open」からビルドしたDLL、もしくはEXEファイルを開き、
  「Run」を実行します。
  以下イメージは、//エラーになるパターンで期待値とイコールにならなかったため、
  異常として赤くなっている。
  Test Drivenも併せて使うといいらしいが・・・?

【C#2.0】 using

2006-10-08 20:44:21 | C#(´・ω・`)
VS2005からusingステートメントが追加されました。
usingを使用すると、usingステートメントを抜けた後にオブジェクトが破棄されるようになります。

ex1:
 using(Form frmHoge = new FrmHoge())
 {
  frmHoge.ShowDialog();
 }

ex1をtry..finallyを使用するとの同じ感覚です。
ex2:
 Form frmHoge = null;
 try
 {
  frmHoge = new FrmHoge();
  frmHoge.ShowDialog();
 }
 finally
 {
  frmHoge.Dispose();
 }

ちなみにusingは、IDisposableインターフェイスが実装されているObjectのみ利用できます。

FxCopにゃん(コードチェッカー)

2006-10-08 00:14:41 | C#(´・ω・`)
.Netでも、ソースコードがコーディングルールが守られているかを
チェックするツール"FxCop"があるそうな。

Javaにもそんなツールがあるそうな。
私は使ったことが無いので判りませんが。

FxCopは、
.NetFramework2.0SDKに付属してくるそうです。
ただし言語は英語になるので、英語が分からない人は辛いですね。

でも一応日本語版も用意されているそうです。
VSTE for SD日本語版
http://msdn2.microsoft.com/en-us/Library/ms182067.aspx

ちなみにわたしゃにはDLできなかったす・・・