BES – Battle Encoder Shirasé
for Win XP/7/10/etc.
Ver. 1.7.7 (stable) & (test): October 2, 2019

Free software that controls per-process CPU usage: an “active” software CPU cooler.

Nothing fancy. It just throttles CPU-hungry application(s) when asked. I made it simply because I really needed it myself.

Probably you have to run BES with admin privileges (right click > “Run as Administrator”), since it tries to control other programs when you ask it to do so. You can use BES on Windows XP or later — at least older versions worked on Windows 2000 too (perhaps the current version does too). BES does not work on Windows 98.

To Gamers: Adjust the Sleep/Awake Cycle in [Control] so that the video won’t get jumpy/choppy. You may want to try a very small value. You can also control the parameters via command line.

NOTE (Aug 24, 2019): I was told that a person called hipapmaho (Ateşçi) was trying to sell an allegedly modified version of BES. While technically anyone may sell BES under the GPL license, I can’t tell if this “modified” version is safe to use or not. Anyway you can freely download a copy of BES from this official site, and you don’t have to pay at all to use it. BES is real free software, open-source, no ads, no phoning home, just doing its job. Actually it doesn’t even do auto-update checking.

Some external sites that explain how to use BES:

KnowledgeBoost, Process throttling in Windows - Battle Encoder...

français BES : un limiteur de charge CPU pour quand il fait trop chaud pour travailler ....

简体中文 【图片】Battle Encoder Shirase(BES)--限制进程的cpu占用率的开源神器【mugen吧】_百度贴吧 / 降低游戏CPU使用工具

BES - 化工布丁

日本語 Battle Encoder ShiraseでCPU負荷率を操作して快適なPCライフを!!, CPUを働かさなくする便利なソフトが、しかもフリーで, CPUの利用率制限ソフト

한국말 BES / CPU 사용량 제어 프로그램 / 게임 2개 돌릴 때 렉 줄이는 방법

Version 1.7.7 (stable) – December 3, 2017
Version (test) – October 2, 2019

  1. Introduction
  2. Download — What’s New
  3. How to Use
  4. Other Menu Items
  5. Command Line — also: Start BES automatically when your OS boots
  6. Output Messages
  7. E-mail Address — Questions? Suggestions? Comments?
  8. Donation — Bitcoin, etc.


(You can check the most up-to-date documents online:

BES is a small tool that throttles the CPU usage of the process you “target”: for instance, you can limit the CPU usage of a process which would use CPU 100%, down to 50% (or any percentage you’d like). With this, you can use other programs comfortably while doing something CPU-intensive in the background.

By limiting the CPU load, you can also cool down your CPU immediately when it happens to get too hot. It’s an “active” software CPU cooler. Conventional soft-coolers save CPU energy by making CPU sleep when it is idle. They passively wait until CPU gets idle. BES is more aggressive: it cools CPU by making the “heating” process slow down, i.e. periodically forcing CPU to be idle for a short time. (But you should install a better hardware cooler if you often need to use BES for this purpose. Actually, the first thing you should try is to remove dust around your heat sink (See below). Active soft-cooling might be an interesting hack, but it's just a workaround after all. On the other hand, if your application uses CPU 100% meaninglessly, let BES do the job!)

Furthermore, BES can hide a window you don’t want to be seen for some reason, without killing the process, and restore the hidden windows again anytime you like.

BES is GPL’ed free software, distributed with (real messy) source code.

BES has a multilingual interface: menu language is switchable between Chinese, Japanese, English, etc.

When minimized, BES is sent to the system tray, as a gray icon when idle, a red icon when active:

Why is it called BES or “Battle Encoder Shirasé”? —There’s a long story about this weird name, but basically, it’s a parody of two anime titles: Battle Programmer Shirase and Battle Fairy Yukikaze. “Battle encoder” means a crazy person who doesn’t stop encoding even when the CPU reaches a very high temperature. BES helps them go on by cooling the CPU in a hackish way.

CPU Heat Problem? Well, I assume that some people use BES because otherwise the CPU would get too hot, even causing an emergency shutdown. If so, please first make sure that your CPU heat sink is clean enough... (Read more)


Basically, just unzip the zip wherever you like and run bes.exe. You don’t need to install it. When you don’t need it anymore, just delete the whole folder that you unzipped, and everything will be okay (unless, of course, you put something important in BES's folder by yourself). BES creates .ini files in its folder to save settings; they are safe to delete.

Current Versions

Usually try thisVer. 1.7.7 (December 3, 2017) Stable — SSE2 required (CPU from year 2000 or newer)

Ver. 1.6.3 (December 6, 2016) Stable (Old) — SSE2 not required

Test versions: Ver. (October 2, 2019), which has a different way to trottle targets. If your target keeps creating a lot of new, short-lived threads, then the current version (1.7.x) of BES may not work very well. BES 1.8.0-test has a different mode, which you can select after you click the “Limit This” button, as “Limit How? > By Porcess.” Though 1.8.0 is still a sketchy, not optimized and possibly unstable, you might want to give it a try if you may be experiencing the above-mentioned problems. [Try test18; test17 was broken!]

What’s new in 1.7.x:

Other versions are here: older versions and sometimes newer betas.

Older Versions

Ver. 1.6.1 2014-01-11 (January 11, 2014)
It was compiled with VC 2008. Changes from the previous version (1.5.2) include:

Starting from version 1.3.x, BES can try to override the security system of Windows so that it can limit httpd.exe (Apache), KService.exe (Kontiki), etc.

Starting from version 1.5.x, you can tweak the Sleep/Awake Cycle (frequency) of BES, in milliseconds. This may be handy for example when you want to throttle a game process while keeping the visual smooth. Try a smaller value like 40 in such a case, instead of the default value, 100. Notice, a 40-millisecond cycle means that the visual can be redrawn, in theory, 25 times a second, allowing a 25-fps movie to play without being jumpy. Do not use a too small value, though (the smaller it gets, the less accurate control you get).

Ver. 1.4.4 2011-12-25
[FIX] Important fix: target list was broken for some users, especially on a 64-bit machine. This is mainly because GetModuleFileNameEx may fail on WoW64 (Thanks to Slawek P.).
Note, better fixes are in v1.5.1. Only minimum fixes were backported to 1.4.x. More specifically, v1.5.1 can almost always show the full path as a File Name.
[FIX] Several bugs. Possible crash.

Ver. 1.4.5 2012-01-26
[FIX] Minor bug fixes. The latest version of 1.4.x, presumably stable.

Ver. 1.5.1-beta 2011-12-25 [NEW] Sleep/Awake Cycle (frequency) in milliseconds is editable (based on suggestions by Marek G.).
[MOD] Several small improvements.

Ver. 1.5.2 2012-01-26
[FIX] Minor bug fixes and minor improvements.

Those are older versions (in case someone needs them). For the current version, see the Download section.

MD5 of bes.exe (Unicode version)
1.7.7      775466B59DEEA1498FC9B150595F5342
1.7.6      A325A00E206DD2D9F25E5405FA917067
1.7.5      D32FEE580DFF44A2425C0449FE8419CF
1.7.4      40E004CCFB5177A68AFA1F579CD599B0
1.6.3      386B641817F020DBFED61C8D5CC0AAA2
1.7.0[.3]  48709E0392FEAE515984FF202872CFDB
1.6.2      A1F5D84E19CF23704A62363A24831794
1.6.1      47E5D4E50463357E50EEED8F83382DE0
1.5.2      03AD9DBF68D12C0AF6539E1F85A1EA71
1.4.5      63FF008BA4D02AFC1B3F2140A2C35F8E
1.5.1      DF53140EC7B6413EF710757B77DA5667
1.4.4      93AEB8374B130221A886B6C995346F70
1.4.3[.1]  AD4F95FE130F10C596D9ADA363AFA9C7
1.4.2      A4FEF53D8214F8E99EF2A3273C7ED227    515633588A882F1D6FF4241BC36A0B64
1.3.8      2C80888B389C10D6053C2F6FBFFA6462
1.2.2a     EA3C44599CAC027721F000C996CBA545

How to Use

  1. Run bes.exe. Click [Target...]

    NOTE: Maybe you should run it with the admin privilidges (right click > "Run as Administrator").
  2. Select the target process you want to throttle, and click [Limit this]. In this picture, the user is going to target VirtualDubMod.exe.

    NOTE: The limiter activated by [Limit this] will be automatically canceled when the target process is gone (i.e. the target application is closed). If you would like to throttle its CPU usage even after it is closed and restarted, use [Limit/Watch]. That tells BES to keep “watching” all the processes, and “target” the application you specified as soon as BES finds it restarted.
  3. Answer the confirmation dialog.
  4. This is how BES looks like when it is doing its job.

    To change how much you limit the time slices given to the target, click [Control...].
  5. This is where you can control the throttle(s). How to use it should be self-explanatory.

    NOTE: This percentage is always relative. If the target originally used the CPU 80%, and if you set limiter −50%, then the CPU load by the target would be 40%. If the original CPU load increased to 90%, then the result by throttling would be 45%. You might want to set the maximum CPU load in the absolute percentage (e.g. “make it exactly 40% whenever possible”), but BES can't do that; because BES is not controlling the CPU directly in low level, but indirectly limits the “greediness” of the target application (i.e. how often it requests the system to give it a time slice) by forcing the targeted process to periodically sleep for a very short time. What you are actually controlling by setting % here is this “periodically how?” part.
    (Nevertheless, if you set it −50%, that application's maximum possible CPU usage would be limited to 50% anyway. Only, this doesn't mean that application is guaranteed to use 50% whenever possible. What is guaranteed is, 50% or less.)

Other Menu Items

“Select Target...” Dialog Box (Process List)

Limit & Limit/Watch: Already explained.

Close: Close this dialog.

Refresh: Refresh the list. When this dialog is opened, BES will gather the information needed to list up all the processes running. If you “refresh,” BES will do the same thing again. It’s like a browser’s reload button, and is useful when a new application is started after you open this dialog (that new application will not be listed until you refresh the list).

Hide: Hide all the windows associated to the selected process. The process is not killed. It’s just that associated windows will get invisible.

Show: Show the windows you hid by “Hide” if the target process is selected in the list. (In other words, you should remember which target you hid. BES actually knows it, but (for security reason) it won’t restore the hidden windows until you explicitly specify the target process.)
NOTE: You can hide a running application, close BES, and restart BES after a long while. Even if you do that, BES still remembers which windows it hid, and will restore them when you click [Show]. However, if the target ends on its own, BES can’t restore its windows (which should be obvious). If you shut down or reboot the system, BES will forget about everything it hid (which makes sense too, as everything ends anyway).

Ask/show: Read the above note. Basically BES can choose the windows to restore automatically and properly. However, when something unexpected happens and things are foobared, you can manually tell BES which windows (related to the selected process) it should show. Using this, you could even force a window that is originally hidden to be shown too (some applications generate unseen windows for various reasons).

List All: The process list is usually not complete. System processes that you are not likely to target—or that you can't target, because of the security restrictions—are not listed by default. [List All] will tell BES to list everything anyway.

Unfreeze: This is just for emergency. I bet this never happens to you, but imagine what would happen if BES crashed just after it made the target sleep and not before it reawakened the sleeping baby (yes, BES is a tool that periodically makes the target sleep for a very short time). The target would then freeze. BES is tested for a long time (from 0.8.x until 1.0 beta 18) and such a thing has never happened even once, but in theory it could happen (you know anything weird and unexpected could happen on Windows). Even if that happens, don't panic: restart BES, open this target dialog, go to the listbox and select the target that is frozen. Then just click [Unfreeze]. This will reset what is called “suspend count” for each related thread, and unfreeze the application in question.
NOTE: “Unfreeze” might happen to un-freeze some buggy games too when they freeze. But in general, it works only when the problem is related to BES itself.

Friend: When the item selected in the list is something that you are unlikely to target (i.e. unlikely to be CPU-intensive), you may want to tell BES that it’s CPU-friendly by clicking [Friend]. If you do that, BES recognizes the application in question as friendly, and always put it in the bottom of the list. (You can do that if you’d like to, but it is not something you must do to use BES).

Unknown: This tells BES to treat the selected item neutrally, not as Foe nor Friend. Everything is Unknown by default.
NOTE: There are a few exceptions, such as VirtaulDub.exe. BES knows VD can be very CPU-intensive, and always considers it as a foe (you cannot change that, as it is hard-coded). What is meant by “VD is a foe” here, is “it may make CPU too hot.” Nothing more than that. It doesn’t mean VD is a bad program at all.

Foe: This tells BES to consider the selected item as Foe, i.e. a greedy application that often uses CPU too much, which BES often has to “attack.” Probably you will target the same foe again and again, possibly everyday. Once you tell BES that it’s a foe, BES automatically list it at the very top of the target list so that you can select it quickly. If you “attack” a process, that process will be automatically treated as a Foe from then on.

NOTE: The distinction between Friend, Unknown, and Foe is only in the listing order. BES will “attack” a Foe and a Friend exactly in the same way, once you order BES to target it.

Menu – File

Watch: This is like Limit/Watch, but using this you can target the application that is not running. BES keeps watching it, and if it is started, BES immediately begins to limit its CPU usage.

Snap: Make a detailed list of the processes currently running, and save it as a text file. Might be informative.

Exit: End BES. You can’t exit if one or more limiters of BES are active. First unlimit all, and you can exit.

Exit anyway: End BES anyway even if it’s active. This is just for emergency, when you must end BES forcefully for some reason. BES is a babysitter that periodically lets the target sleep, and it’s a bad idea to tell it to leave without finishing its job properly. If BES is active, you should first do “Unlimit all.” (Even if told to exit anyway, BES will still try to finish its job gracefully.)

Menu – Do

Select target / Unlimit all / Control: Already explained.

Unwatch: Use this when you want BES to stop watching the application after you tell BES to watch it.

Menu – Options

Real-time mode: When enabled (ticked), BES demands the system to give it a very high priority (“real-time” is like telling Windows, “Hey, if I tell you to do anything, you do it right away without any delay. Don’t let me wait, okay?”). By doing so, probably BES can start as swiftly as possible even if CPU load is already near 100%. BES is a special kind of application that tries to control the CPU usage when it is already monopolized. Yet BES itself needs to get some time slices (i.e. use CPU a little) to do its job. So giving a special priority to it may make sense. Furthermore, in the real-time mode, BES will lower the process priority of the target. When disabled (unchecked), BES will behave modestly, just like an ordinary application. In reality, this usually doesn’t make any big difference.

Changed in 1.2.1: BES 1.2.1 runs as HIGH_PRIORITY_CLASS in non real-time mode (default). It was NORMAL_PRIORITY_CLASS in ver. 1.2.0 and before. In real-time mode, BES gets REALTIME_PRIORITY_CLASS in every version.

Write log: Tell BES to write a debug log. Might be informative, but usually not needed.

Language: Switch the menu language.

Menu – Help

About / Keyboard shortcuts / Visit homepage / Online help: Self-explanatory.

Ukagaka: If you have no idea, don’t bother yourself. Well, simply put, Ukagaka (→ Wikipedia: Ukagaka) is a kind of desktop mascot system. If an Ukagaka or a compatible ghost is running, BES sometimes (but quite rarely) communicates with it. For instance, when you open BES’s about box, the ghost may start chatting and tell you the version information of BES. (This feature is no more there in newer versions.)

Command Line

The following command line tells BES to watch target.exe, and—when target.exe starts running—throttle its CPU usage so that target.exe will be only allowed to use CPU (100 − percentage) % at most:

"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]

Optionally, you can use an integer between 1 and 99 as percentage. If percentage is omitted or invalid, the last known valid percentage for target.exe is automatically used (if this is the first time to target target.exe, the default reduction 33% will be applied, unless percentage is specified). Note that, when started from command line, BES will Watch/Limit the target, not just Limit it.

The --minimize option, or -m for short, tells BES to start as minimized (sent to the system tray).

For the full list of command line options, start BES and see Help | Command Line Help.

Advanced Command Line Options (v1.7.4+)

If you have two targets
"path\to\bes.exe" -J -m "c:\path to\target.exe" 20 "c:\something\else.exe" 30
You can use a wildcard (any.exe in some folder)
"path\to\bes.exe" -J -m "c:\some folder\*.exe" 50
Add one target to the Watch List (30%)
"path\to\bes.exe" "c:\windows\system32\calc.exe" 30 --add
Add one target to the Watch List (30%, and 40 ms Sleep/Awake Cycle)
"path\to\bes.exe" "c:\windows\system32\calc.exe" 30;40 --add
With 2 targets
"path\to\bes.exe" -J -m "c:\path to\target.exe" 20;100 "c:\something\else.exe" 30;40

-J stands for “Job list.”

More Options (v1.7.5+)

Limit Process ID (PID) 1140 with 50%
"path\to\bes.exe" "pid:1140" 50

You can use "pid:xxxx" just like a path, with most of the other options. Note that PID is not watched, just limited.

Start BES automatically when your OS boots

Create a shortcut to bes.exe in your Startup folder, where you can edit the properties of the shortcut and write your full command-line in "Shortcut | Target". Probably you’ll need to create/start that shortcut as Administrator.

To use the above-mentioned method, you may have to disable UAC and always log in as admin. If you do not want to do that, try this method instead: How To Use The Task Scheduler To Launch Programs Without UAC Prompts [tips thanks to João C; added 2017-09-02]. Also, there seems to be a way to disable UAC for a specific program (do some search).

Per-target Sleep/Awake Cycle

If targets have different paths, see above.

If you are dealing with two instances of the same exe and you want to use a per-process Sleep/Awake Cycle, try BES 1.7.5+, which understands "pid:xxxx" as a pseudo-path (see above). However, that may not work for you, perhaps because you don’t know the PIDs of your targets. So here is plan B: (1) copy bes.exe to a different folder. (2) Start BES A, check Options | Allow Multiple Instances, then Close BES. Do the same with BES B. (3) After that you can start BES A and BES B independently. Let BES A handle Process A and BES B handle Process B — you have to do this manually via GUI.

List of Common Output Messages

Started: OK
Limiter started successfully. (Metaphor: I started babysitting.)
Calm: OK
Limiter is active, and successfully re-scanned the targeted process. No changes were detected in the thread list. (The baby is in the bed. No problem.)
Target Re-Locked On: OK
One or more threads of the targeted process were gone, and/or the targeted process created one or more new threads. BES successfully re-enumerated the thread(s) of the targeted process, and everything is under control again. (The baby fell from the bed, but I put it back there. Problem solved. )
* Unlimited *
Limiter is deactivated. (I returned the baby to its mom.)
Initial OpenThread failed
Limiter failed to start. The possible reasons include: (1) Windows didn’t let BES access to the targeted process for security restrictions; and (2) the target has been terminated already. (I went to babysitting, but the door is locked and no one answers.)
No threads / Target missing
BES couldn’t find any threads of the targeted process and/or BES couldn’t find the targeted process anymore. Most probably the target has been terminated already. (Uh-oh, the baby is missing.)

E-mail Address

If you have any trouble, or if you have any suggestions, bug reports, or comments, you can contact the author at the email address in this picture For anti-spam reasons, I may change my contact address any time and I may reply to you using a different mail address, but I will try to write you back anyway. When writing to me: (1) make sure that I’ll understand that you’re talking about BES [since I’m offering several programs/scripts (all open-source)]; (2) If possible, try not to use a Gmail address [you can use it anyway, but your message might be spam-filtered]; (3) If you attach large file(s), e.g. a log file, please compress them as a ZIP, .7Z, etc.

(You can write to me in French if you really hate English.) Je peux lire français un peu mais je répondrai en anglais parce que mon français est très mal :D

(You can write to me in Japanese.) メールのやりとりは日本語でも対応できますので、遠慮なくどうぞ。

(BES has Finnish GUI too?) Puhin suomea vähän silloin kun olin nuori, mutta valitettavasti en enää. Englanniksi, olkaa hyvä.

Donation (Bitcoin, etc.)

While BES is free software and you don’t need to pay for it at all, I’d be happy to accept bitcoin donations.

1Gj6wn5VNGDHumtB4dXbcnxdvJoSyngnyA [Added on 2018-04-13]

If you’d like to use Paypal, there are a few options:

(1) If you are interested in bitcoin (BTC): you can visit Virwox, where you can buy BLL with Paypal, and exchange BLL to BTC. Tips: “Link to avatar” is optional; “No Avatar” is fine.

(2) If you are not interested in bitcoin: you can visit and support the CAL project via Paypal. CAL is a project to make a huge online dictionary of the Aramaic language. Although hosted by Hebrew Union College, the project is not necessarily Jewish (e.g. one of the main dialects of Aramaic is mostly Christian). It’s not my project, and has nothing to do with BES, but it’s a great project any language lover may want to support.

Alternatively, instead of sending a donation to me or someone else, you can simply be a bit nicer to your friends/family members/etc. This may sound strange and/or corny, but I think basically it’s the same thing, because that way, in the big picture, you’re making the world where I live, a slightly better place. Equivalently, you could also try to be slightly more tolerant to your “enemies,” refraining from using a religion or non-religion as a weapon.


CPU Heat Problem? (Added on July 1, 2007)

Well, I assume that some people use BES because otherwise the CPU would get too hot, even causing an emergency shutdown. If so, please first make sure that your CPU heat sink is clean enough, unless your computer is a laptop or something and you cannot open the box. Usually, all you need is at most a screwdriver. Consult the instruction manual of your computer. The box may be heavy, but opening it is very easy, as long as it is supposed to open at all. No special knowledge is required. It's just a box, even though the things that are in it are complicated and delicate. Just make sure to pull the power plug and it's not hot before you open the box. Keep the removed screws in a safe place (if you remove them) and remember their correct places (or take a note), so that you can put them back later. They are tiny and tend to be missing if treated carelessly. You need to open the box and you may also need to remove some more trivial parts to see the heat sink, but don't disassemble the heat sink itself (or anything that looks complicated), unless you know exactly what you are doing.

If you find that your heat sink has gathered dust, which is very likely if you haven't cleaned it before, suck up the dust by using the vacuum cleaner carefully (you should do this periodically). Just vacuuming may be enough, but you might also want to use so-called canned compressed air. It's handy and inexpensive. First switch on your vacuum cleaner, and while sucking the air around the heat sink using your left hand, blow the dust off with canned compressed air using your right hand. This way, you can remove the dust quite completely. (If you don't have canned air, you can use your mouth at your own risk. Be careful not to spit anyway.)

[You don’t want to get your vacuum (plastic nozzle) too closely to your PC case, because static electricity is potentially harmful, and also because it might accidentally hit something if placed too near. Ideally, you could carefully move your PC outside when the weather is good and just use a can of compressed air to blow the dust off. But that’s not really practical and has its own potential risks too. I’d just use a canned air and capture the blown dust with a vacuum at a point somewhere not too close to my mother board. Whatever you do or whatever you avoid, your computer will be broken sooner or later anyway, and I assume that built-up dust is significantly more harmful (shortening its lifetime) than avoiding cleaning. However, I suggest you do some search and draw your own conclusion if you’re worried.]

Note that the gas from so-called canned air is not actually air, but some kind of toxic gas (carbon dioxide aka CO2, dimethyl ether (DME) aka methoxymethane, etc.), so use it carefully, and try not to inhale the gas. It's not that toxic (for instance, carbon dioxide is always around you anyway), but inhaling a lot in a short period is not a good idea, obviously. Also note that in some countries, they can still legally sell hydrofluorocarbon (HFC), typically difluoroethane (HFC-152a) and/or tetrafluoroethane (HFC-134a), for this purpose, but you should avoid using them. They are known to be quite strong greenhouse gases, like 100 times worse than CO2, although apparently being ozone-safe (being ozone-safe and being a greenhouse gas are two different things). Especially HFC-134a is a bad one. HFC-152a is not really good either. It's kind of idiotic and self-contradictory to heat up the Earth to solve your heat problem. It's a vicious cycle to break. At least, avoid what can be avoided. Incidentally, some products may also contain what is called a bittering agent (denatonium benzoate) for some complicated reason. Whatever the reason, this thing is VERY bitter, unbelievably, inexpressibly, ridiculously bitter, almost making you vomit instantly, so if it happens to stick to your fingers (for instance, after you air-duster your keyboard), never ever lick your fingers for any freaking reason, but just wash your hands really well. Maybe you shouldn't air-duster your cell phone either.

Canned compressed gas is convenient, but could be dangerous, it might even explode, so read the instruction before using it and keep it out of children's reach.