[2001/05/30] .net developers conference 2001 may / c#の生産性とパフォーマンス
Post on 28-Jul-2015
55 Views
Preview:
TRANSCRIPT
C#とは
C# is the first language to introduce
component-oriented properties and
methods and events.
Anders Hejlsberg
C#の生産性
Visual C++ vs Visual C# の場合
同様のアプリケーションを作成した場合、Visual C#のほうが生産性が高い
Visual C#はRAD
必要なコンポーネントをドラッグ&ドロップ
ダブルクリックでイベントハンドラを作成
プロパティウィンドウでプロパティを変更
デモ解説(C#の生産性)
Visual C++のコード
Visual C#のコード
void CProject8Dlg::OnClickedButton1(void){
// TODO : ここにコントロール通知ハンドラ コードを追加します。CEdit *ed = (CEdit*)GetDlgItem(IDC_EDIT1);CStatic *st = (CStatic*)GetDlgItem(IDC_STATIC1);CString str;
ed->GetWindowText(str);st->SetWindowText(str);
}
protected void button1_Click (object sender, System.EventArgs e){
label1.Text = textBox1.Text;}
C#のパフォーマンス
「中間言語」の誤解
C#はインタープリタではない
最終的にはネイティブコードにコンパイル
熟練者の書くコード
オプティマイズにより、中級者の書くアセンブラのコードより速い
JITにより、CPUに特化したネイティブコードにコンパイル
デモ解説(C#のパフォーマンス)
Visual C++の場合int i1 = 0;
for(int i2 = 0; i2 < 255; i2++){
i1 += i2;}
int i1 = 0;mov dword ptr [i1],0
for(int i2 = 0; i2 < 255; i2++)mov dword ptr [i2],0 jmp L2 :L1mov eax,dword ptr [i2] add eax,1 mov dword ptr [i2],eax :L2cmp dword ptr [i2],0FFh jge L3
{i1 += i2;mov eax,dword ptr [i1] add eax,dword ptr [i2] mov dword ptr [i1],eax
}jmp L1 :L3
int i1 = 0;xor ecx,ecx
for(int i2 = 0; i2 < 255; i2++)xor eax,eax
{i1 += i2;:L1add ecx,eax inc eax cmp eax,0FFh jl L1
}
最適化なし
最適化あり
デモ解説(C#のパフォーマンス)
Visual C#の場合int i1 = 0;
for(int i2 = 0; i2 < 255; i2++){
i1 += i2;}
// Code size 23 (0x17).maxstack 2.locals ([0] int32 i1,
[1] int32 i2)IL_0000: ldc.i4.0IL_0001: stloc.0IL_0002: ldc.i4.0IL_0003: stloc.1IL_0004: br.s IL_000eIL_0006: ldloc.0IL_0007: ldloc.1IL_0008: addIL_0009: stloc.0IL_000a: ldloc.1IL_000b: ldc.i4.1IL_000c: addIL_000d: stloc.1IL_000e: ldloc.1IL_000f: ldc.i4 0xffIL_0014: blt.s IL_0006IL_0016: ret
int i1 = 0;xor ebx,ebx
for(int i2 = 0; i2 < 255; i2++)xor edi,edi jmp L2
i1 += i2;:L1add ebx,edi
for(int i2 = 0; i2 < 255; i2++)inc edi :L2cmp edi,0FFh jl L1
}
ILへコンパイル
ネイティブコードにコンパイル
C#の設計思想
C/C++ファミリー言語の中で最初のコンポーネント指向言語
イベント、メソッド、プロパティ
設計時、実行時の属性
XMLを使用したドキュメントの融合
ヘッダーファイル、IDLが不要
C/C++開発者のためのRAD言語と環境
コンポーネント指向言語
プロパティの実装
public string labelText
{
get
{
return label1.Text;
}
set
{
label1.Text = value;
}
}control1.labelText = "Hello!";
コンポーネント指向言語
メソッドの実装
public void changeText (string str)
{
label1.Text = str;
}
control1.changeText("Hello!");
コンポーネント指向言語
イベントの実装
イベントシグネチャの定義public delegate void EventHandler
(object sender, EventArgs e);
イベントと発生ロジックの定義
public event EventHandler LabelMouseEnter;
protected void OnLabelMouseEnter
(object sender, EventArgs e){if(LabelMouseEnter != null)LabelMouseEnter(this, e)
}
コンポーネント指向言語
イベントハンドラの定義と登録
control1.LabelMouseEnter += new
EventHandler(this.control1_LabelMouseEnter)
protected void control1_LabelMouseEnter
(object sender, EventArgs e)
{
control1.labelText = "マウス通過";
}
コンポーネント指向言語
全てのものをコンポーネントとして扱えるため、再利用性が高い
クライアントサイドコンポーネント、サーバーサイドコンポーネントの両方で使用可能
Windowsコントロールライブラリ
クラスライブラリ
Webサービス
top related