Hi you all,
after installing the Fall Creators Update of Windows 10 64bit we noticed a delay in the follwoing functions:
When starting - takse very long to open a new document.
Copy an object (rectangle) - takes about 30 sec. (busy clock apears)
Print dialog appears after a long delay of about 1 min.
Export to web dialog appears after a long delay of about 1 min.
There might be other problems, but we uninstalled the update. After reinstalling it again, same problems. Now permernatently uninstalled. Normal behavior again.
Any ideas? Does anyone have similar problems?
Thanks for your response.
It's a porblem of the Fall Creators Update and CorelDRAW.
The problem: Some Winows API functions are terrible slow since Windows 10 Fall Creators Update. There are also dependencies to display drivers. In Windows Save Mode, all functions are still very fast.
CorelDRAW calls those funcitons many times with same parameters without need. They could store and reuse the results, but they call the functions ten times for each new/copy/export/..., especially EnumColorProfilesW().
I created a Visual C++ program that tests the system, here is the code:
#include <Windows.h> #include <Icm.h> // mscms.lib needed
void main() { ENUMTYPE zType; ZeroMemory( &zType, sizeof( zType ) ); zType.dwSize = sizeof( zType ); zType.dwVersion = 0x300u; zType.dwFields = ET_DEVICENAME | ET_SIGNATURE; zType.pDeviceName = L"Microsoft print to PDF"; zType.dwDeviceClass = CLASS_PRINTER; BYTE abBuffer[ 2u ]; DWORD dwSize = 2u; DWORD dwProfiles = 0u; DWORD dwStart = GetTickCount(); if( EnumColorProfiles( NULL, &zType, abBuffer, &dwSize, &dwProfiles ) ) { DWORD dwDuration = GetTickCount() - dwStart; TCHAR acMessage[ 1000u ]; if( dwDuration > 10u ) { swprintf_s( acMessage, sizeof( acMessage ), L"Duration of EnumColorProfiles(): %u ms. This is slow!\n" L"E.g. CorelDRAW would take about %u ms to copy an object to clipbord, export images or create a new document.", dwDuration, 10u * dwDuration ); MessageBox( NULL, acMessage, L"Duration", MB_OK | MB_ICONEXCLAMATION ); } else { swprintf_s( acMessage, sizeof( acMessage ), L"Duration of EnumColorProfiles(): %u ms (that's ok).", dwDuration ); MessageBox( NULL, acMessage, L"Duration", MB_OK | MB_ICONINFORMATION ); } return; } MessageBox( NULL, L"Error: EnumColorProfiles() failed!", L"Error", MB_OK | MB_ICONERROR ); }
I used different graphics cards and drivers with my system, and the results are differing enormously: - Safe mode: 3 ms - No driver installed (normal mode): 90 ms - ASUS nVidia GTX1060-6G with newest driver: 110 ms - AMD Radeon R9 200 series card with driver version Crimson 17.7.2: 520 ms - AMD Radeon R9 200 series card with driver version Adrenalin 18.1.1 (newest): 4950 ms On other systems, the effect with Fall Creators Update is smaller, but still present (eg. 13 ms on my wife’s pc).
I provided this information to the customer support. I hope, the software developers get notice. I now work with the patched ones, until corel raises an update. I am a professional software developer and suggested them a solution that would work. I also patched the corel-dlls for test purposes, and then the delay was short.
I now work with the patched ones, until corel raises an update.
I hope they do their job.
I also provided the information to Microsoft.
Great work, any chance of getting those patched DLLs ? :-)
Hi Nathan, my DLLs are only for test purposes. They might be instable or could result in wrong colors. I cannot recommend to use these for productive work (but I do so). I deactivated only the calls to the slow functions (they are in most cases not needed). I didn’t implement a proper replacement for the return values. This would be much more work. Corel could do this with two lines of code in my eyes.
Furthermore, it would be illegal to give the DLLs away. But I can tell you what I did (only 64-Bit-Version):
I used a HEX editor (XVI32), opened “C:\Program Files\Corel\CorelDRAW Graphics Suite 2017\Programs64\CRLCLR.dll” and replaced 6 Bytes at Address B1E4 (value FF 15 8E BC 05 00) with 90 90 90 90 90 90.
Then I opened “C:\Program Files\Corel\CorelDRAW Graphics Suite 2017\Programs64\CdrPrn.dll” and replaced 6 Bytes at Address 5DB04 (value FF 15 7E 23 10 00) with 90 90 90 90 90 90.
Before I did this, I have made a copy of both DLLs. Furthermore the locations is read only, so the modified DLL files must be safed in some other place an then copied or moved to C:\Program Files\...
For explanation: 90 is the no operation code, FF 15 is a call, the following 4 bytes are the address. So I simply deactivated the call. The return values are not set to safe values, so if CorelDRAW interprets them, this could lead to a crash or to wrong results. Keep this in mind.
I can give no warrenty and do not know the possible negative impacts of this changes. You can try it on your own risk.
i try to find B1E4 and 5DB04 on those DLLs, but no luck, couldn't find it :(
B1E4 and 5DB05 are the hex addresses. Maybe your hex editor displays addresses near that on the left side. If you click within the line, the actual address is displayed in the status bar at the bottom.
If you searc hex values via search dialog, you have to search for FF 15 8E BC 05 00 (CRLCLR.dll) and FF 15 7E 23 10 00 (CdrPrn.dll). In both cases, the values occour only once in my DLLs. Check the addresses of the found values to be sure you got the correct ones.
No warrenty, but good luck!