方法 : パフォーマンスを向上します。

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

次の方法でプログラミングは、メモリを節約でき、デバイス アプリケーションのパフォーマンスを向上できます。

Windows フォームとグラフィックスでメモリを保存するには

  • BeginUpdate 、 EndUpdate 、 ComboBoxListBoxListViewなど、提供するコントロールには、 ToolStripComboBoxおよび TreeView メソッドを使用します。

  • SuspendLayoutResumeLayout メソッドを使用してコントロールの位置とします。

  • バックグラウンドで他のフォームを読み込み、Show() メソッドを使用する前にデータを持つコントロールを作成します。

  • イベント処理を保留中のプロセスを続行するためだけに不可欠なタスクを実行するコードを制限します。

  • サブスクライバー オブジェクトの破棄、前に購読、イベントへの減算を使用して代入演算子 (-) です。 詳細については、「How to: Subscribe to and Unsubscribe from Events (C# Programming Guide)」を参照してください。 正しく登録解除するには、障害から発生した問題には、メモリ リークが発生できます似ています。

  • オフスクリーン ビットマップを使用します。 カスタマイズ例については、「方法 : Off-Screen イメージを描画します。」を参照してください。

  • OnKeyDown OnKeyPress、およびキーのイベント ハンドラーを追加するのではなくコントロールの OnKeyUp メソッドをオーバーライドします。

データと文字列でメモリを保存するには

  • オブジェクト変数ではなく Int32 ループでは、整数変数 ( Int64または for) を使用します。

  • メタデータ テーブルを検索してしまう、パフォーマンスへの影響のため列挙体の ToString メソッドは避けてください。

  • OutOfMemoryException エラーを回避します。 この例外を内部目的または新しいオブジェクトのインスタンスに対して割り当てるための十分なメモリがない場合、共通言語ランタイムによってスローされることができます。 この例外を回避するには 64 KB 以上のメモリを消費する大規模メソッドのプログラミングしないでをください。

  • 例外] ダイアログ ボックスのエラー メッセージの文字列を含む System.SR.dll を削除します。 メモリを節約するのにはアプリケーションせずこのファイルを配置することができます。 .NET Compact Framework は動的にファイルがある場合に System.SR.dll に含まれるエラー文字列を読み込みます。

    この.dll ファイルをデバイス上に存在ない場合、すべての例外にはメッセージが含まれて「リソース アセンブリ読み込むことができません」開発、中には、わかりやすい例外を確認するように、System.SR.dll への参照を Visual Studio プロジェクトに追加すると便利です。

  • 文字列は、文字列を変更するたびに新しい String オブジェクトが作成され不変、です。 StringBuilder を使用を多くの場合、変更される文字列を構築するとき検討します。

  • ParseExact のシリアル化に使用する正確な書式がわかる場合は、 DateTimeDateTime メソッドを使用します。 それ以外の場合は、DateTime パーサーは、複数カルチャに固有の書式をしようと順番にします。

  • 開く SqlCeCommand オブジェクトの数および終わったらそれらの破棄を制限します。

ネイティブ コードと相互運用するときにメモリを保存するには

  • プラットフォームでの操作を呼び出す、Int32IntPtr など、マネージとアンマネージ メモリ内の共通の表現が、blittable 型を使用します。 32 ビットよりも大きい Blittable 値型はより迅速でよりも参照値によって渡されます。 blittable 型については、.NET コンパクトなフレームワーク Blittable 型 を参照してください。

  • InAttributeOutAttribute 属性の引数、関数の署名に使用不要なマーシャリングを減らすに使用します。

  • Marshal IntPtr PtrToStructure PtrToStringBSTR GetObjectForNativeVariantなどのマネージ オブジェクトと手動で変換する、方法 GetObjectForIUnknown クラスに使用します。

  • ネイティブ マネージ呼び出しをサポートするスタブの JIT コンパイルさせるには、Prelink および PrelinkAll メソッドを使用します。

  • ネイティブ COM オブジェクトに一般的な場合、またはその他以外は S_OK を返し HRESULT の値として S_FALSE を返す、期待する場合に PreserveSigtrue フィールドを設定し、マネージ シグネチャがネイティブ シグネチャと一致します。 これにより、tryのオーバーヘッドを回避でき、COM 呼び出しで例外への値をランタイムの HRESULT を変換するときに必要があるcatch ブロックします。

  • 1 つのプラットフォームで起動する複数の呼び出しを使用するよりも呼び出しには、できるだけ作業を行います。

コレクションで使用されるメモリを節約するのには

  • コレクションを配列に基づく場合は、インデクサーを使用します。

  • 可能であれば、余分な記憶域を大幅に増加して動的なサイズを変更ことができるためは、コレクションには、サイズを指定します。

  • ボックス化とボックス化解除値型のオーバーヘッドを回避するのにには汎用コレクションを使用します。 最適なパフォーマンスで独自最適化されたコレクションの結果を定義します。

XML で使用されるメモリを節約するのには

  • XmlTextReader より多くのメモリを使用するではなくし、 XmlTextWriterXmlDocument を使用します。

  • パフォーマンスを向上させるために設定し、XmlReaderSettingsXmlWriterSettings を指定します。 IgnoreWhitespaceIgnoreComments プロパティ値、該当する場合は、パフォーマンスが向上が大幅にします。

  • UTF-8 を使用して、ASCII、UTF-16 エンコーディングで、ANSI と Windows コードページ エンコーディングより高速である文字です。

  • 追加の検証作業が必要だため、解析するためのスキーマの使用しないでください。

  • 属性としての列をマップ場合して使用、型指定された DataSetDataSet XML ソースからの作成します。

  • DataSet を作成する際は、次を回避します。

    • スキーマ推論します。

    • 入れ子になったテーブル。

    • 複数の DateTime 列。 パフォーマンスを向上させる、Ticks プロパティ値を代わりに使用します。

  • XML 逆シリアル化を使用する場合は、次のガイドライン パフォーマンスを向上します。

    • すべての文字を検証するため、できるだけ短くな要素と属性名を保持します。

    • XML 属性のデータが XML 要素のデータに基づいてより高速に基づきます。

    • 該当する場合は、XmlNodeReader.Skip メソッドを使用します。

    • パフォーマンスが重要になるとバイナリ シリアル化を検討します。

  • 時間の量を減らす XML シリアル化の種類ごとに 1 XmlSerializer インスタンスを使用費やしたメタデータを検索します。

  • 大量の XML シリアル化は、メモリを使用できる、ので作成、カスタムのバイナリ シリアル化機構代わりと BinaryReaderBinaryWriter を使用して検討します。

Web サービスを使用するときにメモリを保存するには

  • 読み取りと、DataSet を書き込み、DiffGram を使います。 詳細については、「DiffGrams (ADO.NET)」を参照してください。

  • XML として、デバイスに、リモート DataSet とそのスキーマを保存します。

  • 最初の呼び出しは、2 回目以降の呼び出しより遅いため、スプラッシュ スクリーンの中に呼び出す、単純な Web サービス メソッドを作成します。

  • ネットワークとデータ エラーを処理する注意してください。

  • 場合によっては、手動で DataSet としてシリアル化 XML 文字列パフォーマンスを向上させる結果、Web サービス呼び出しを行う前にします。

高度なプログラミングでメモリを保存するには

  • 大規模な操作を非同期に処理します。

  • 仮想呼び出しを避けます。 .NET Compact Framework ランタイムの仮想呼び出しは、約 30% の静的より低速またはインスタンスの呼び出しです。 .NET Compact Framework は使用されない V テーブル、制約が設定されているリソースのためのためメソッドは高価な操作は、クラスとインターフェイスの階層を走査によって呼び出されます。 .NET Compact Framework はためほとんどの場合呼び出しはいないする必要があるは、解決の仮想呼び出しのキャッシュを保持します。

  • 可能な場合は、プロパティの代わりにフィールドを使用します。

  • 値型を定義する場合は、GetHashCodeEquals メソッドをオーバーライドします。 これらがオーバーライドされない場合、ランタイムは一般的なバージョンを使用して基本 ValueType クラスでこれらのメソッドのします。

  • リフレクションを使用して注意が必要です。 un-instantiated クラスで調査の目的をリフレクションを使用して、アプリケーション内のインスタンス化されたオブジェクトのパフォーマンスに影響ことができます。

  • マネージ リソース完全修飾型名がされ、RESX ファイルに正確なをしている確認します。 適切なバージョンと PublicKeyToken フィールド必要があります。 パフォーマンスを不適切に指定した型の最も適切な代替を検索する作業に影響します。

  • 注意してください場合によってはアプリケーションの読み取り、ファイルから直接データが十分なと ResourceManager を使用してより効率的。 ResourceManager サテライト アセンブリに一致する、バイナリのリソースが見つかる前に、最適なを検索するファイル システムに複数の場所を調査する可能性があります。 適切なツールを使用して、ジョブの。

参照

概念

.NET Compact Framework でデバイスのメモリ管理

.NET コンパクトなフレームワーク方法を説明したトピックの検索

その他の技術情報

最適化フレームワークのパフォーマンスと、.NET での診断