- Home /
 
What could cause C++ dll muti-threading to perform worse in Build mode
I am writing a C++ DLL for my Unity Windows application, where the dll will create multiple work-intense and time-critical threads. One surprising behaviour I observed was that the performance of the DLL was significantly worse in Build mode than Editor mode. To rule out the possibility that my function is affecting the performance, I did an experiment where I replaced my function with std::this_thread::sleep_for(std::chrono::milliseconds(30)) and logged down the execution time. When in the Editor mode, the execution time was very consistently around 30 ms as expected. I ran the editor session for a long time to make sure the time measurement is consistent. However, when in the Build, I could always observe some sort of "hiccup" from time to time that the abnormal execution time can range from 35 ms to 45 ms. I allocated a console window to display the standard output from the DLL in both Editor and Build mode.
Here is the pseudo code of my DLL:
 void initialize(std::thread *& pWorkerThread, [other_args]) {
     pWorkerThread = new std::thread(WorkerFunction);
     // Initialize other threads ...
 } 
 
 void stop(std::thread *& pWorkerThread, [other_args]) {
     // set stop_condition here
     if (pWorkerThread->joinable()) {
          pWorkerThread->join();
     }
     delete pWorkerThread;
     pWorkerThread = NULL;
 }
 
 void WorkerFunction() {
     while (!stop_condition) {
         std::chrono::steady_clock::time_point t_start = std::chrono::steady_clock::now();
 
         // simulate the work load
         std::this_thread::sleep_for(std::chrono::milliseconds(30));
         std::chrono::steady_clock::time_point t_end = std::chrono::steady_clock::now();
         std::chrono::duration<float, std::milli> dur = t_end - t_start;
         std::cout << "Process duration: " << dur.count() << std::endl;
     }
 }
 
               Since the editor is adding a lot of overhead, one would typically assume the performance is worse in Editor mode. In addition, since my c++ functions are built into the DLL, based on my understanding, they should behave the same regardless of which mode my Unity application calls them. I was suspecting the process and thread priority might be different in Build mode, so I manually set the priority class of my application to High_PRIORITY_CLASS using WinAPI, but it did not improve the situation at all. At this point, I have been stuck on this for days and I am running out of ideas for how this could happen and what to do. If someone could point out potential topics I should look at, or explain what are the differences between build and editor mode that could result in such performance issue, I would greatly appreciate it!
Your answer
 
             Follow this Question
Related Questions
How do I get maximum performance on extremely heavy calculations? 1 Answer
Distribute terrain in zones 3 Answers
Native c++ (mingw) plugin works in editor but not in build 1 Answer
How to build a game with Leap Motion ? 1 Answer
RunTime Error in Unity when I'm using a function from a C++ Dll 0 Answers