Presentation is loading. Please wait.

Presentation is loading. Please wait.

互換性とパフォーマンス 川西 裕幸 DirectX Technical Evangelist

Similar presentations


Presentation on theme: "互換性とパフォーマンス 川西 裕幸 DirectX Technical Evangelist"— Presentation transcript:

1

2 互換性とパフォーマンス 川西 裕幸 DirectX Technical Evangelist
Windows® XP との 互換性とパフォーマンス 川西 裕幸 DirectX Technical Evangelist 製品マーケティング本部 マイクロソフト株式会社

3 XP でよりよく動作させるには

4 メモリー管理のヒント VirtualAlloc( )
MEM_RESERVE アプリケーションのアドレス空間内である領域を確保 物理的な記憶領域が保証されているわけではない MEM_COMMIT 物理的な記憶領域を保証 MEM_RESERVE との組み合わせが可能 ページ保護属性を指定 自動的にページ境界に合わせる VirtualFree( ) で開放

5 メモリー管理のヒント VirtualProtect( )
ページ保護属性の変更 コミットされたページでのみ動作 データを読み込み専用に設定する際に便利 システムに最適化させることが可能 バグ追跡に有用

6 一般的なパフォーマンスのヒント ファイルの開閉を繰り返さない ファイルを開くのは負荷の高い操作
さらに XP のセキュリティ保護によってこの操作はより多くのリソースを消費 ファイルを開いたままにして、その作業が終了したときだけ閉じる

7 一般的なパフォーマンスのヒント 使用パターンについてのシステム情報を与える
CreateFile( ) 呼び出しに FILE_SCAN_SEQUENTIAL フラグを使う あるファイルを始めから終わりまでずっと読み込むときのアクセスを最適化 OS はアクセスを先読みする 必要なデータの順番を整理する 特に CD や DVD から読み込むときは

8 一般的なパフォーマンスのヒント C ランタイム ライブラリをスタティック リンクしない 代わりに Win32 関数を使う
C ランタイム ライブラリの代わりに、NTDLL がエクスポートするルーチンを使う LIBC.LIB や LIBCMT.LIB を使わない

9 一般的なパフォーマンスのヒント DLL ローディングに LoadLibrary() を使う DLL をいつロードするかが制御可能に
アプリケーションの開始がより高速に

10 一般的なパフォーマンスのヒント DisableThreadLibraryCalls() を呼び出す
通常プロセス内の新しいスレッド アタッチのたびに DLLMain は DLL_THREAD_ATTACH で呼び出される 大部分の DLL はこの情報を使わない DisableThreadLibraryCalls() によってこれを回避

11 一般的なパフォーマンスのヒント 定数変数を const で宣言 変数空間から完全に排除できる 読み込み専用セクションに置かれる
変数が入る読み書き可能なページはより多くのサイズを必要とするので、ページングが改善される。

12 一般的なパフォーマンスのヒント DLL グローバル変数は一度だけ静的に初期化する
複数ページに分割されないような良い振る舞いのデータ構造体を使う プライベート ヒープが有用だが、注意深く ! 決定前に複数の設計ポリシーをテスト

13 一般的なパフォーマンスのヒント アクセスを局所的に 複数ページに渡るデータはページフォルトを増加
例えば、DWORD を 2MB のページ メモリーに書き込む (4k ページ) ベストケース = 512 ページフォルト、シリアルに書き込み ワーストケース = ˜1,000,000 ページフォルト (1024 2) 各ページ フォルトは 10ミリ秒を消費すると仮定すると ベストケース = 5秒 (512 * 10ms) ワーストケース = hours (1,000,000 * 10ms = 10,000 秒)

14 一般的なアプリケーション 互換性の問題

15 NAT を使った動作が重要 多くのファイアウォールは NAT をベースにしている Windows ICS が広く採用されている
ケーブル モデム DSL モデム ISDN ルーター ルーター/ゲートウェイ/デバイスなどのそれ以外の組み合わせ DirectPlay® 8 は完全に NAT をサポート

16 アプリケーションの互換性 本当にアプリケーションは「非互換」なのか ? 何がアプリケーションを非互換にしたのか ?
インストールできない It OS の機能が変わってしまった OS の変更がアプリケーションのバグを顕在化した プラットフォームの差

17 セットアップとインストール 一番良くある問題は ?
アプリケーションがインストールできない インストールできない最もよくある理由は Windows のバージョン チェックが間違っている OS アップグレードのほうがクリーンインストールよりアプリケーションがパスする確率が高い

18 Win32® API のいくつかの変更 WM_KEYUP と WM_KEYDOWN GetWindowsDirectory
wParam を無変更のまま TranslateMessage に渡す GetWindowsDirectory ユーザーごとの Windows ディレクトリを返す OPENFILENAME STRUCTURE lpstrInitialDir は「マイ ドキュメント」を返す場合がある DS_SHELLFONT システムは “MS Shell Dlg 2” を使用

19 一般的なヒープの問題 解放後のメモリ アクセス 小さなブロックを再割り当て 割り当て→読み書き→開放→読み込み これは不正なデータ アクセス
アクセス保護違反が起きない場合がある Windows 2000 と XP は、より早くブロックを再利用 小さなブロックを再割り当て 同じポインタは使えない Windows はそのブロックを動かす場合がある 以前はメモリを開放すると未使用ブロックリストの一番下に入れた、WinNT SP4 以降リストの一番上にしている(キャッシング)

20 システムコードによる スタック消費量の増加
システムはより多くのスタック スペースを使用 小さなスタックしか割り当てていないアプリケーションはクラッシュするかもしれない チェックと修正 /STACK – リンカ オプション STACKSIZE - .DEF ファイル /F – コンパイラ オプション

21 呼び出し規約 Window プロシージャのすべてに TDCALL を使うこと Windows 95/98 なら C_DECL でも動作
Windows XP では動作しない 呼び出し規約の実装が正しく行われていることを確認

22 メッセージの順序 ある個別の順序で Windows メッセージが出力されることに依存してはいけない
新しいスレッド スケジューラがバグを顕在化 メッセージは Windows の同期オブジェクトではない これをするには Win32 同期オブジェクトを使うこと

23 互換レイヤ 互換レイヤ 互換モード ウィザード 個々の互換性修正の集まり、以前の Windows バージョンをまねをするよう設計
互換レイヤをアプリケーションに適用させる 永続性を有効にすることで、アプリケーションは必ずこのレイヤで実行される

24 アプリケーション互換性ツールキット ホワイト ペーパーとドキュメント よくある互換性の問題をリスト
アプリケーションの問題発見用にチェックリストをテスト 新しいアプリケーション開発用のテスト手順ドキュメント Designed for Windows XP アプリケーション仕様書

25 アプリケーション互換性ツールキット アプリケーション修正用ユーティリティ XP 用にベータ版が利用可能 このツールキットはどこに ?
QAppFix, AppParse, PageHeap, CompatAdmin. 将来のタイトル修正にはこのユーティリティを使わないで: リリースされたタイトルの問題部分を同定 開発中のタイトルの非互換部分の確認、問題発見時間の削減 XP 用にベータ版が利用可能 このツールキットはどこに ?

26 ご質問は ? ? ? ? ? ? ? ? ? ? ? ?


Download ppt "互換性とパフォーマンス 川西 裕幸 DirectX Technical Evangelist"

Similar presentations


Ads by Google