Ask a Question

CTF Loader

SOLVED
m_essaid
Valued Contributor

CTF Loader

Hi,

Most of us must run our test nightly. I have personnaly several machines running on Win 10 Pro, and updated to last version (1909).

My tests are very common in the way that they simulate keystrokes and mouse clicks on an accounting program.

An annoying thing is that I have a process, CTF Loader (ctfmon.exe) that takes more and more size all along the nights and reaches up to 1,5Gb (!!!) in memory, leading the machine to crash due of lack of memory.

The only solution for me is to kill periodicaly this process or reboot the machines.

if I try to disable Touch Keyboard and Handwriting Panel Service, the same problem still occurs in another process name : Host Process for Windows Tasks, which still runs MsCTFMonitor.

Any hint please ?

Thank you,

10 REPLIES 10
Marsha_R
Champion Level 3

I googled "ctf loader high memory usage" and saw many articles about disabling it.  You'll need to see which one works best for you.

tristaanogre
Esteemed Contributor

Are you actually automating something against CTFMON.EXE?  If not, you could exclude it.  Go to Tools -> Current Project Properties -> Open Applications -> Process Filter.  By default, I believe it's set to "ignore selected processes".  Add CTFMON.EXE to the list and see if that helps.


Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----

Why automate?  I do automated testing because there's only so much a human being can do and remain healthy.  Sleep is a requirement.  So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.

Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available

Thanks for answering guys,

Robert it seems to be the "MsCtfMonitor.dll" the culprit, could I disable its usage by the same way (should I enter its name in the process filter) please ?

Thanks,

tristaanogre
Esteemed Contributor

Process filter has to do with processes that show up in Windows.  Basically, if you go to Task manager and look at the list of processes, whatever process name shows there, that's how you filter the process.  So, my guess is that CTFMon is calling the DLL... so, to exclude the DLL, you need to filter out CTFMonitor


Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----

Why automate?  I do automated testing because there's only so much a human being can do and remain healthy.  Sleep is a requirement.  So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.

Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available

Hum, that's what I thought too but I still have in the Process Explorer that MS provides this dll that gets bigger and bigger...

Last day it way 2 Gb on one of my machines...

Anyway, thank you Robert. 🙂

m_essaid
Valued Contributor

I'm sorry Tanya but you tagged this discussion as resolved but that hint doesn't help : even if you exclude the ctfmon.exe process in TestComplete it still grows.

 

I tried to stop some services but things are getting worse after that.

 

What I finaly tried is to simply terminate ctfmon.exe process in my TC scripts before each test.

@m_essaid You didn't reply to the thread for over a month, so it got marked as resolved.  If you're not responding, the threads don't stay open forever.  

m_essaid
Valued Contributor

Hi,

Finaly I found a solution : I ask TC to close the process before the tests. I had to adapt slightly the following method which closes a process :

 

procedure KillProcessus(NomProcessus: string);
var
  p, IsClosed;
begin
  p := Sys.FindChild('ProcessName', NomProcessus);
  while (p.Exists) do
  begin
    p.Close;
    IsClosed:= p.WaitProperty('Exists', False);
    if not IsClosed then
      p.Terminate;
    p:= Sys.FindChild('ProcessName', NomProcessus);
  end;  
end;

This procedure don't work because there is no window for this process. So I used this one which work pretty fine :

 

procedure KillProcessusCTFMon(NomProcessus: string);
var
  p, IsClosed;
begin
  p := Sys.FindChild('ProcessName', NomProcessus);
  while (p.Exists) do
  begin
    p.Terminate;
    p:= Sys.FindChild('ProcessName', NomProcessus);
  end;  
end;
m_essaid
Valued Contributor

Hi @Marsha_R ,

I hope that every subject that don't have answers is not tagged as resolved...

cancel
Showing results for 
Search instead for 
Did you mean: