Firefoxが落ちる問題で、
CPU Dynamic Assign Helperと言うソフトを入れたのだが、うちの環境では期待通りに動かなかった。
そのページにリンクがあり、
limitCPUと言うものにもたどり着いたが、いまいち使い勝手が合わなかった。
で、探していたら
ProcAffと言うソフトにたどり着いた。
こいつでほぼ期待通りの動きをしそうだったのだが、DLLがないとか言われて実行できなかった。
しかし、最後のProcAffにはソースがついていたので、見てみたらなんとなく雰囲気がつかめた。
こうなったら、久しく離れていたWindowsのプログラムを書くしかないでしょう。
さっそく、Microsoftのページから、
Visual C# 2005 Express Edition日本語版をダウンロードして、インストールしてみる。
Windowsの開発はまともにやったことがないので、作法とか全然わからないのと、ヘルプが追いにくいので微妙に苦労したが、肝としてはProcessクラスのProcessorAffinityプロパティを設定するだけなので、至極簡単である。
本当は、ショートカットで設定できる「実行時の大きさ」を引き継ぎたかったのだが、自分の起動時の「実行時の大きさ」を取得する方法がわからなかったので、常にNormalになってしまう。
出来上がったソースは以下のような感じ。
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;
namespace lc
{
class Program
{
static void Main(string[] args)
{
if (args.Length < 2)
{
MessageBox.Show("Usage: lc affinity command args...", "lc", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
try
{
IntPtr affinity = new IntPtr(Int32.Parse(args[0]));
Process me = Process.GetCurrentProcess();
ProcessStartInfo startInfo = me.StartInfo;
startInfo.FileName = args[1];
startInfo.Arguments = "";
for (int i = 2; i < args.Length; i++)
{
startInfo.Arguments += args[i] + " ";
}
Process p = Process.Start(startInfo);
p.ProcessorAffinity = affinity;
}
catch (Exception e)
{
MessageBox.Show(e.Message, "lc", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
使い方は、CPUを制限したいアプリケーションの起動ショートカットのプロパティを開き、リンク先のところの前に、「lc.exe 2」 とか追加すれば良い。第1パラメータは、1 ならCPU1だけ、2ならCPU2だけ、3なら両方使う。
あ、私の場合はlc.exeがPATHの通ったところにあるので、そうでない場合はフルパスで書いてください。
とりあえず、ためしに作ったインストーラを添付しておきます。
lc-1.0.0.1.zip