2010-02-03
■ Windowsコマンドプロンプト基礎文法最速マスター

Windowsコマンドプロンプトの文法一覧です。他の言語をある程度知っている人はこれを読めばコマンドプロンプトの基礎をマスターしてバッチファイルを書くことができるようになっています。簡易リファレンスとしても利用できます。
1. 基礎
メッセージ表示
ECHO Hello, world.
コメント
コメントには「REM」(Remarks の略)を用いることが多いですが、「::」(本来はラベル)でもコメントの代用が可能です。ただし IF や FOR のブロック内では「::」はエラーになるので注意してください。
REM コメントその1 :: コメントその2
変数の宣言
SET コマンドで変数(環境変数)の設定を行います。変数名と「=」の間は空白を入れず詰めて入力するようにしましょう(空白を含んだ変数名が設定されてしまう為)
SET 変数名=[文字列] SET /A 変数名=[数式]
変数を参照する場合は、%変数名% と「%」で囲む必要があります。
ECHO %変数名%
バッチファイルの実行
バッチファイルを実行するにはコマンドラインで次のようにします。
script.bat [Enter]
または
script.cmd [Enter]
.bat(Windows バッチファイル)と .cmd(Windows コマンド スクリプト)の大きな違いはありません。
スクリプトに同じ名前を付けた場合は .BAT が優先されます。優先順位は SET PATHEXT にて確認できます。
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
出力結果をファイルに書き出すにはリダイレクトを使います。「>」は上書きで「>>」は追記になります。
script.bat > file.txt [Enter]
2. 数値
数値の表現
SET コマンドの /A オプションを用いることで変数に数値を代入することができます。なお、代入できるのは整数(32bit 値)のみで、小数は代入できません。
SET /A num=-2147483647 … OK SET /A num=0 … OK SET /A num=123 … OK SET /A num=2147483647 … OK SET /A num=2147483648 … NG :「無効な数字です。数値は 32 ビットで表記される数値です。」 SET /A num=1.23 … NG :「演算子がありません。」
数値は、16進数、8進数表記での設定も可能です。
SET /A num=0x12 … OK : 16進数(値は28) SET /A num=022 … OK : 8進数(値は28) SET /A num=09 … NG :「無効な数字です。数値定数は 10 進 (17 桁)、16 進 (0x11 桁)、または 8 進 (021 桁) です。」
四則演算
四則演算です。
SET /A num=1+1 … 2 SET /A num=1-1 … 0 SET /A num=1*2 … 2 SET /A num=1/2 … 0 : 小数は切り捨て(商) SET /A num=1/0 … NG : 0 除算エラーです。
余りの求め方です。コマンドラインで実行する場合は「%」、バッチファイルで実行する場合は「%%」を指定します。
SET /A num=3%2 … 1(余り)
インクリメントとデクリメント
インクリメントとデクリメントです
:: インクリメント SET /A num+=1 :: デクリメント SET /A num-=1
3. 文字列
文字列の表現
文字列には引用符(ダブルクォーテーション等)を指定する必要はありません。また「=」の後の空白も文字列として処理されます。
SET str1=abc SET str2=de f SET str2= g hi
文字列操作
文字列を結合する方法です。
:: 結合 SET str1=aaa SET str2=bbb SET str3=%str1%%str2% … aaabbb
配列に分割する機能はありません。
文字列の長さを求めるコマンドはありませんが、以下のようなバッチファイルで代用可能です。結果は ERRORLEVEL にセットされます。
@ECHO OFF REM File : GetLength.bat REM Usage : GetLength.bat abcde IF "%1"=="" GOTO :EOF SET /A LENGTH=0 SET LAST=%1 :LOOP SET /A LENGTH+=1 SET LAST=%LAST:~1% IF NOT "%LAST%"=="" GOTO LOOP EXIT /B %LENGTH%
文字列から任意の位置の場所の文字を切り出す方法です。
:: 切り出し SET str1=abcd SET str2=%str1:~0,2% … ab(1桁目(オフセット0)から2文字)
4. 配列
配列はありません。
5. ハッシュ
ハッシュ変数はありません。
6. 制御文
IF コマンド
IF 文に相当します。1行に書く形式とブロック形式の構文が利用できます。
IF 条件 処理
ブロック形式の IF 文には () を用います。
IF 条件 ( 処理 ) ELSE ( 処理 )
ただしブロック形式では以下のような書き方をするとエラーになるので注意してください。
<エラーになる例> IF 条件 ( 処理 ) ELSE ( 処理 )
条件の箇所には、以下のような条件を指定することができます。
IF [NOT] ERRORLEVEL 番号 コマンド IF [NOT] 文字列1==文字列2 コマンド IF [NOT] EXIST ファイル名 コマンド IF 文字列1 比較演算子 文字列2 コマンド
比較演算子は次のいずれかになります。
EQU - 等しい NEQ - 等しくない LSS - より小さい LEQ - 以下 GTR - より大きい GEQ - 以上
条件ループ
WHILE 文はありませんが、GOTO コマンドと条件式を組み合わせることで代用可能です。
SET /A 変数=0 :LOOP 処理 IF "%変数%"=="終了値" GOTO END SET /A 変数+=1 GOTO LOOP :END
FOR コマンド
FOR /L ~ が、他の言語の FOR 文に相当します。
%変数には任意の単一文字(大文字、小文字は区別される)を指定可能ですが一般的には %i を用いることが多いようです。コマンドラインで実行する場合は「%変数」、バッチファイルで実行する場合は「%%変数」とします。
FOR /L %変数 IN (開始,増分,終了) DO コマンド [コマンドパラメータ] <例> FOR /L %i IN (1,1,3) DO @ECHO %i <実行結果> 1 2 3
また、以下の構文により他の言語の FOR EACH ~(配列やコレクションを参照する機能)と同様の使い方も可能です。
FOR %変数 IN (セット) DO コマンド [コマンドパラメータ] <例> FOR %i IN (aaa bbb ccc) DO @ECHO %i <実行結果> aaa bbb ccc
7. サブルーチン
CALL コマンドでバッチファイルを呼び出すか、:ラベル名を指定します。引数は %1, %2, %3, ... としてセットされます。
サブルーチンの戻り値は EXIT /B [終了コード] を指定することで ERRORLEVEL として返却可能です。
CALL :SUM 1, 2 ECHO %ERRORLEVEL% GOTO END :SUM SET /A num1=%1 SET /A num2=%2 SET /A total=num1+num2 EXIT /B %total% :END
8. ファイル入出力
FOR コマンドの /F オプションを利用することでファイルを解析し読み込むことが可能です。
以下のサンプルはファイルを1行ずつ読み込み出力ファイルに追記するサンプルです。コマンドラインで実行する場合は「%変数」、バッチファイルで実行する場合は「%%変数」とします。
FOR /F "tokens=*" %i IN (input.txt) DO ECHO %i>> output.txt
9. 知っておいたほうがよい文法
バッチファイルでよく出てくる知っておいたほうがよい文法の一覧です。
ECHO OFF
バッチファイル実行時は不要なメッセージを表示させないのが通例です(デバッグ時は除く)。
以下の1行をバッチファイルの先頭に入れると以降のコマンドが画面上に表示されなくなります。
コマンドの前に @ を付けることによって、そのコマンド自身もコマンドプロンプトに表示されなくなります。
@ECHO OFF
%~ 構文
%~ 構文は %変数 を様々な情報に展開します。以下は %0 を %~ 構文に従って展開した例です。
ECHO %~0 … ファイル名 :[test] ECHO %~f0 … フルパス :[C:\home\edu\BAT\expand\test.bat] ECHO %~d0 … ドライブ名 :[C:] ECHO %~p0 … パス名のみ :[\home\edu\BAT\expand\] ECHO %~n0 … ファイル名 :[test](拡張子無し) ECHO %~x0 … 拡張子 :[.bat] ECHO %~s0 … 短い名前のみ :[C:\home\edu\BAT\expand\test.bat] ECHO %~a0 … ファイル属性 :[--a------] ECHO %~t0 … ファイル日付 :[2010/02/05 00:45] ECHO %~z0 … ファイルサイズ:[204] ECHO %~dp0 … ファイルの場所:[C:\home\edu\BAT\expand\] ECHO %~nx0 … ファイル名 :[test.bat](拡張子付き) ECHO %~fs0 … 完全なパスと短い名前:[C:\home\edu\BAT\expand\test.bat] ECHO %~ftza0 … 複合表示 :[--a------ 2010/02/05 00:45 204 C:\home\edu\BAT\expand\test.bat]
例えば、バッチファイルのある場所に移動するには、以下のコマンドを実行します。
cd /d %~dp0
参考情報
その他の基礎文法マスター
この記事は他の基本文法マスターに便乗して書いた物です。誤り等ございましたらコメント等して頂けると助かります。
- Perl基礎文法最速マスター - Perl入門~サンプルコードによるPerl入門~
- Route 477 - Ruby基礎文法最速マスター
- PHP基礎文法最速マスター | Shin x blog
- Python基礎文法最速マスター - D++のはまり日誌
- Java基礎文法最速マスター - 何かしらの言語による記述を解析する日記
- VBA基礎文法最速マスター - 何かしらの言語による記述を解析する日記
- Brainf*ck基礎文法最速マスター - 医者を志す妻を応援する夫の日記
- Haskell基礎文法最速マスター - think and error
- Bash基礎文法最速マスター - 何かしらの言語による記述を解析する日記
- VBScript 基礎文法最速マスター - CX's VBScript Diary - VBScript グループ
- JavaScript基礎文法最速マスター - なんとなく日記
2009-09-05
■ [Windows 7][評価版] 「Windows 7 Enterprise 90 日間評価版」インストール

TechNet サイトより「Windows 7 Enterprise 90 日間評価版」がダウンロードできるようになったようです。
■ Windows 7 Enterprise 90 日間評価版
さっそく「Virtual PC 2007」にてインストールしてみました。
■ ダウンロードの詳細 : Virtual PC 2007
<仮想PC の作成方法>
1. Microsoft Visual PC を起動します。
2. 「新規」ボタンより「新しいバーチャル マシン ウィザード」を起動します。
3. 「新しいバーチャル マシン ウィザードの開始」とメッセージが表示されますので「次へ」を押します。
4. 「オプションの選択:(*) バーチャルマシンの作成」を選択し「次へ」を押します。
5. 「バーチャル マシンの名前と場所」に「Windows 7(評価版)」等、入力し「次へ」押します。
6. 「オペレーティングシステム:Windows Vista」を選択し「次へ」を押します。
7. 「このバーチャル マシンへの割り当て」にてメモリを割り当て「次へ」を押します。
※ 搭載メモリに余裕がある場合は「1024MB」にした方が良いでしょう。
8. 「バーチャル ハードディスク オプション:(*) 新しいバーチャル ハード ディスク」を選択し「次へ」を押します。
9. 「バーチャル ハードディスクの場所」にて「場所」と「サイズ」を指定し「次へ」を押します。
※ デフォルトで「65536 MB」(64GB)になってますが「16384 MB」(16GB)もあれば十分だと思います。
10. 「新しいバーチャル マシンのウィザードの完了」とメッセージが表示されるので「完了」を押します。
<仮想PC への Windows 7(評価版) のインストール方法>
1. Microsoft Visual PC を起動します。
2. 「Windows 7(評価版)」を選択し「起動」を押します。
3. メニューより [CD] - [ISO イメージのキャプチャ] を選択します。
4. 「キャプチャする CD イメージの選択」ダイアログより「Windows 7(評価版)」の *.iso ファイルを選択します。
※ 例:7600.16385.090713-1255_x86fre_enterprise_ja-jp_EVAL_Eval_Enterprise-GRMCENEVAL_JA_DVD.ISO
5. 仮想PC を再起動すると「Windows 7(評価版)」のインストールが開始されます。
→ メッセージに従いインストール作業を行います。
6. 「Windows 7(評価版)」のインストール後、[操作] - [バーチャル マシン追加機能のインストール/更新] にて追加機能をインストールします。
→ これをインストールすることで [ALT]+[Ctrl] を押すこと無くゲストOS/ホストOS 間をマウス移動できるようになります。
「プロダクト キー」はあらかじめ設定済みのようで、インストール時に聞かれることは無いようです。
インストールにかかる時間は環境に依存するとは思いますが 30 分くらいではないかと思います。
2009-06-14
■ [Windows 7][Desktop Heap] Windows の限界に挑戦!?

「人力検索」で以下の質問(というか調査)をしてみました。
お使いの PC で「メモ帳(notepad.exe)」が何個起動できるか教えてください。一番、多く起動できた方に「いるか賞」を差し上げます。
※ 注:以下の作業を行うとシステムが不安定になる可能性があります。実行は自己責任でお願いします。
■ メモ帳の起動方法ならびに個数のカウント方法
1. コマンド プロンプト(cmd.exe)を起動します。
2. 指定回数 notepad.exe を起動します(以下は FOR 文を使用して 100 個連続で起動する例です。限界まで繰り返します。)
FOR /L %i IN (1,1,100) DO ECHO %i 個目 & notepad.exe
3. 起動した notepad.exe の一覧を取得します。
tasklist /FI "IMAGE eq notepad.exe" /NH > tasklist.txt
4. 起動した notepad.exe を終了させます。
taskkill /F /FI "IMAGENAME eq notepad.exe"
5. tasklist.txt 内の notepad.exe 個数をカウントします。
find /C "notepad.exe" tasklist.txt
<実行結果(例)>
TASKLIST.TXT: 933 … notepad.exe の個数
■ 回答例(実行環境, 実行結果を記入してください。)
OS : Windows Vista SP2(32-bit)
CPU : Core2 Quad Q9550 2.83GHz
Memory : 3GB
個数 : 933 個
備考 : 補足事項等(個数を増やすために行ったこと等)あれば記入してください
結果は以下の通り。
No | ID | OS | SP | 32/64 | CPU | GHz | Memory | 起動個数 |
---|---|---|---|---|---|---|---|---|
1 | pspet | Windows XP | SP3 | 32 | Core 2 Duo E8400 | 3 GHz | 2 GB | 150 |
3 | kn1967 | Windows Me | 32 | 700 MB | 38 | |||
4 | rsc96074 | Windows Vista | SP2 | 32 | Core 2 Duo E4500 | 2.2 GHz | 2 GB | 591 |
5 | QuestR2 | Windows XP | SP3 | 32 | Celeron | 1.7 GHz | 1.5 GB | 114 |
6 | K-Papansa | Windows 7 RC | 64 | Coire i7 920 | 2.6 GHz | 12 GB | 1174 | |
7 | dev_zer0 | Windows XP Home | SP3 | 32 | AMD Sempron | 1.5 GHz | 256 MB | 196 |
8 | hisam_k | Windows Vista | SP2 | 64 | Phenom X4 9150e | 2 GHz | 8 GB | 923 |
9 | kazubokkuri | Windows 7 RC | 32 | Pentium D 935 | 3.2GHz | 4 GB | 500 | |
10 | Tommi | Windows XP Pro | SP3 | 32 | Core 2 Duo E8500 | 3.8GHz | 3.25 GB | 134 |
Windows 2000 Pro | SP4 | 32 | PeniumIII | 1.0 GHz | 512 MB | 203 | ||
11 | skv101 | Windows XP Home | SP3 | 32 | Celeron | 1.8 GHz | 1.5 GB | 176 |
Windows 7 | 32 | Celeron | 1.8 GHz | 1.5 GB | 800 |
予想通りというか、やはり、64-bit OS が複数プロセスの起動に強いという結果になりました。
また、想定していた計算式は以下の通り。想定の範囲内の結果でしたので、計算式は、そんなに間違ってないのでは?と思います。
OS | 32/64 | 計算式(想定) | 起動個数(想定) |
---|---|---|---|
Windows 2000 | 32 | ( 3072 KB - χ KB) / (512 bytes * 26) | 223 個 |
Windows XP | 32 | ( 3072 KB - χ KB) / (512 bytes * 32) | 181 個 |
Windows Vista | 32 | (12288 KB - χ KB) / (512 bytes * 32) | 757 個 |
Windows Vista | 64 | (20480 KB - χ KB) / (512 bytes * 32) | 1269 個 |
Windows 7 | 32 | (12288 KB - χ KB) / (512 bytes * 32) | 757 個 |
Windows 7 | 64 | (20480 KB - χ KB) / (512 bytes * 32) | 1269 個 |
計算式=(デスクトップ ヒープのサイズ - OS 起動時の消費サイズ) / メモ帳1個の消費サイズ
2009-06-03
■ [Windows 7][ウイルス対策] AVG Anti-Virus Free Edition 8.5

ウィルス対策ソフトとして「AVG Anti-Virus Free Edition 8.5」を入れてみました。
■ 無料アンチウイルスソフト AVG Anti-Virus Free Edition 8.5 ダウンロード
対応OS として
- Windows 2000
- Windows XP
- Windows XP Pro x64 Edition
- Windows Vista
- Windows Vista x64 Edition
と、ありますが、Windows 7 RC1(x64) でも、問題なくインストール完了しました。
タスク マネージャー を見ると
- 通常
イメージ名 | ユーザー名 | 説明 |
---|---|---|
avgnsa.exe | SYSTEM | AVG Network scanner Service |
avgrsa.exe | SYSTEM | AVG Resident Shield Service |
avgcsrva.exe | SYSTEM | AVG Scanning Core Module - Server Part |
avgtray.exe *32 | cx20 | AVG Tray Monitor |
avgwdsvc.exe *32 | SYSTEM | AVG Watchdog Service |
- AVG 画面起動時
イメージ名 | ユーザー名 | 説明 |
---|---|---|
avgscana.exe | cx20 | AVG Command-line Scanning Utility |
avgnsa.exe | SYSTEM | AVG Network scanner Service |
avgrsa.exe | SYSTEM | AVG Resident Shield Service |
avgcsrva.exe | SYSTEM | AVG Scanning Core Module - Server Part |
avgcsrva.exe | cx20 | AVG Scanning Core Module - Server Part |
avgtray.exe *32 | cx20 | AVG Tray Monitor |
avgui.exe *32 | cx20 | AVG User Interface |
avgwdsvc.exe *32 | SYSTEM | AVG Watchdog Service |
という感じで、GUI 部分は、32bit で、サービス本体は、64bit で動作しているようです。
2009-05-17
■ [Windows 7] 「クラッシック [スタート] メニュー」が無い!?
![はてなブックマーク - 「クラッシック [スタート] メニュー」が無い!? - CX's Memo(Windows関連) はてなブックマーク - 「クラッシック [スタート] メニュー」が無い!? - CX's Memo(Windows関連)](/contents/071/874/965.mime1)
Windows Vista までは「タスクバーと [スタート] メニューのプロパティ」にてスタイルを
- [スタート] メニュー
- クラシック [スタート] メニュー
のどちらかを選べていましたが、Windows 7 では「クラシック [スタート] メニュー」のオプションは無くなっているようです。
■ Windows 7でなにが変わるのか(スタート・メニュー編):ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20090203/324144/
■ クラシック・タイプは選べない?
http://itpro.nikkeibp.co.jp/article/COLUMN/20090203/324144/?ST=win&P=2
慣れの問題かもしれませんが、今まで(Windows 95 の頃から)クラシック タイプのメニューを使用していたので、違和感がなかなか取れません。
(新しいタイプのスタートメニューだと階層化されたメニューが見づらい(特に名前が長い場合)のがネックな気がします。)
■ [Windows 7] MSVCRT.DLL

Windows 7 になってシステム DLL の構成(依存関係)に変更が入っているようです。
<Windows Vista の DLL 依存関係> [C:\Windows\System32\MSVCRT.DLL] ├[C:\Windows\system32\KERNEL32.DLL] │├[C:\Windows\system32\NTDLL.DLL] │└[C:\Windows\system32\NTDLL.DLL] └[C:\Windows\system32\NTDLL.DLL]
<Windows 7 RC1 の DLL 依存関係> [C:\windows\system32\MSVCRT.DLL] ├[C:\windows\system32\KERNELBASE.DLL] │└[C:\windows\system32\NTDLL.DLL] ├[C:\windows\system32\NTDLL.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-CONSOLE-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-DATETIME-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-DEBUG-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-ERRORHANDLING-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-FIBERS-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-FILE-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-HANDLE-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-HEAP-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-INTERLOCKED-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-LOCALIZATION-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-LIBRARYLOADER-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-MEMORY-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-MISC-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-NAMEDPIPE-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-PROCESSENVIRONMENT-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-PROCESSTHREADS-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-PROFILE-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-STRING-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-SYNCH-L1-1-0.DLL] ├[C:\windows\system32\API-MS-WIN-CORE-SYSINFO-L1-1-0.DLL] └[C:\windows\system32\API-MS-WIN-CORE-UTIL-L1-1-0.DLL]
と、思って、MS サイトを検索してみたら以下の情報が出てきました。
■ Windows アプリケーション品質 CookBook: アプリケーションの互換性、信頼性、パフォーマンスを高めるための開発者ガイド
http://msdn.microsoft.com/ja-jp/windows/dd459214.aspx
■ 17. 新しいバイナリ: リファクタリング
- 説明
- 内部的なエンジニアリングの効率を高め、将来的な作業基盤をしっかりと整えておくために、新しい低レベルのバイナリへの機能の再配置を行いました。
- このリファクタリングによって、将来の Windows 環境の総合的な "表面積" (ディスクやメモリ要件、サービス、攻撃にさらされる領域など) をより小さく抑えることが可能となります。
- 具体的な影響や現象
- 既存の機能に対する影響の解決策
Windows XP SP3 32bit
Xeon 2.80GHz(HT on) 2.25GB RAM
デスクトップヒープは20480に設定
XP でも頑張れば(設定変更すれば)1000個越えできるんですね。情報ありがとうございます。
ちなみに、Windows Vista の初期のバージョンのデスクトップヒープは XP と同じく、3MB だったようです。
<参考情報>
■ USER オブジェクトと GDI オブジェクト – 第 1 部
http://technet.microsoft.com/ja-jp/windows/ff606443.aspx
> Windows Vista 32 ビットの最初のリリースでは、対話型のヒープ サイズは
> 以前の 32 ビット バージョンの Windows と同じで 3 MB でした。
> リリース後に、ヒープをときどき使い果たしてしまうユーザーがいることが
> 遠隔測定によってわかったので (おそらく、より多くのメモリを持つシステムで、
> より多くのアプリケーションを実行していたためだと思われますが)、SP1 では、
> このサイズが 12 MB に引き上げられました。
Wordが落ちてしまうなどXPでも作業によってはヒープサイズが3MBでは
少なすぎると思うのですよね
もともと512MB以下のメモリがメーカーPCの標準だった時代だから
それでもよかったのかもしれませんけど
SP1でVistaがわりと安定するようになったのは
ヒープサイズのOS標準設定の拡大も大きかったと思います
これでも調子付いてIE8のタブを大量に開いてyoutubeなんか見たり
気の向くままにgoogle検索を繰り返していると
タブが開けなくなったりします
特殊なアプリケーションを使ってメモリの上限に達する場合より
クライアント数のリソース値による上限に達するほうが速いと
思われますからこの辺の知識はWindows上で作業するなら
持っていても損のない知識だと思います
というのはVistaの標準設定である12 MBのデスクトップヒープです
蛇足ですいません
タブが開けなくなる理由は、デスクトップヒープが原因のケースもあると思いますが、
多くは、プロセス毎のGDI オブジェクトの上限(10,000個)が原因な気がします。
GDI オブジェクトの上限に達しているかどうか?は
[タスクマネージャ] - [プロセス] - [表示] - [列の選択] - [GDI オブジェクト]
で確認できます。
ちなみに、Google Chrome だと、タブを沢山開いても、GDI オブジェクトをほとんど消費しないようです。
<参考情報>
■ はてブ閲覧時のリソース不足 - 人力検索はてな
http://q.hatena.ne.jp/1227957618
■ Windows の限界に挑む: USER オブジェクトと GDI オブジェクト – 第 2 部
http://technet.microsoft.com/ja-jp/windows/ff621348
上限を変更することができるようですね
taskmanagerで確認してみましたが
一番多くGDIオブジェクトを利用しているプロセスはexplorerでした(4141)
tab数46のIE8はもっとも多くGDIを消費しているプロセスで1525
ftp://www.ashisuto.co.jp/pub/sybase/TechNote/1019174.pdf
などを見ると15000程度でOSが不安定になるようであまり積極的にいじるべきではない
パラメータのようですね
> パラメータのようですね
ある種のOSの設計上の限界なんでしょうね・・・
セッションあたりのGDIオブジェクトの限界(各プロセスの合計)が65,535(0xFFFF)というのも
16bitのWindowsの仕様を引きずっているようですし。
> tab数46のIE8はもっとも多くGDIを消費しているプロセスで1525
1500個くらいであれば、まだ大丈夫そうな気がします。
Web ページの作りにもよると思いますが、昔、経験した事象ですと、
はてなブックマークで大量にブックマークされたページを表示すると
同様にGDIオブジェクトも消費(1アイコンに付き1個消費)してました。
<参考(GDIを大量消費するページ)>
■ はてなブックマーク - 東大で学んだ卒論の書き方★論文の書き方(ブックマーク数:7000件)
http://b.hatena.ne.jp/entry?mode=more&url=http://staff.aist.go.jp/toru-nakata/sotsuron.html
IE8 が手元に無いため、今、確認することができませんが、
IE9 RC 版だと、描画方法が改善されたらしく、GDI オブジェクトはそれほど消費しなくなっているようです。
(恐らく、描画方法が、GDI→DirectX になった為と思われます。)
<参考>
■ ASCII.jp:DirectXで進化したInternet Explorer 9を試してみた|あなたの知らないWindows
http://ascii.jp/elem/000/000/510/510714/index-2.html