के बाद QHD/4K स्क्रीन पर ExtTextOutW x50 प्रदर्शन ड्रॉप कुछ अजीब कारणों से, एक उच्च रिज़ॉल्यूशन बिटमैप (2560x1440/3840x2160) पर क्लिप किए गए टेक्स्ट को आकर्षित करने के लिए WinAPI के ExtTextOutW फ़ंक्शन को कॉल करने के परिणामस्वरूप विंडोज अपडेट करने के बाद ~ x50 प्रदर्शन हिट 10 रचनाकार संस्करण अद्यतन के साथ। मेरे उपयोगकर्ता के परीक्षण और डीबग लॉग से, ऐसा लगता है कि बिटमैप या संभवतः फ़ॉन्ट आकार में थोड़ा अंतर प्रदर्शन हिट को ट्रिगर कर सकता है।विंडोज क्रिएटर संस्करण अपडेट
यहाँ एक डिबग प्रदर्शन हिट दिखा लॉग है:
10/05/2017 15:51:50 [ 63227,186] : Calculate Rect
10/05/2017 15:51:50 [ 63227,190] : Rect : Left=263, Top=504, Right=3561, Bottom=2155
10/05/2017 15:51:50 [ 63227,193] : Set Shadow Color
10/05/2017 15:51:50 [ 63227,198] : Render Text Shadow
10/05/2017 15:51:50 [ 63236,650] : Set Text Color
10/05/2017 15:51:50 [ 63236,661] : Render Text "Kingdom come Deliverance"
10/05/2017 15:51:50 [ 63246,062] : Rendering complete
आप लॉग से देख सकते हैं, ExtTextgOutW के लिए एक एकल कॉल लेता है ~ 9.5ms जबकि यह एक ही कॉल 1ms रचनाकारों से पहले अंतर्गत अच्छी तरह से संभाल लिया है अद्यतन करें।
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Calculate Rect');{$ENDIF}
cRect := Rect(X,Y,Width+X,MainForm.Monitor.Height-(1+(MainForm.Monitor.Height div 540)));
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Rect : Left='+IntToStr(cRect.Left)+', Top='+IntToStr(cRect.Top)+', Right='+IntToStr(cRect.Right)+', Bottom='+IntToStr(cRect.Bottom));{$ENDIF}
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Set Shadow Color');{$ENDIF}
srcColor := txtCanvas.Font.Color;
txtCanvas.Font.Color := OutLineColor;
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Render Text Shadow');{$ENDIF}
Windows.ExtTextOutW(txtCanvas.Handle,X ,Y+(MainForm.Monitor.Height div 540),ETO_CLIPPED,@cRect,@S[1],I,nil);
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Set Text Color');{$ENDIF}
txtCanvas.Font.Color := srcColor;
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Render Text "'+S+'"');{$ENDIF}
Windows.ExtTextOutW(txtCanvas.Handle,X ,Y ,ETO_CLIPPED,@cRect,@S[1],I,nil);
{$IFDEF TEXTRENDERTRACE}DebugMsgFT('c:\log\.TextRender.txt','Rendering complete'+CRLF);{$ENDIF}
इस कोड Y- में मामूली अंतर के साथ दो बार एक ही पाठ प्रतिपादन द्वारा एक बहुत ही सरल ड्रॉप-छाया प्रभाव करता है:
यहाँ वास्तविक कोड है जो आप ऊपर डिबग आउटपुट के लिए तुलना कर सकते हैं है ऑफसेट और रंग। http://forum.inmatrix.com/index.php?showtopic=14995&page=2
हम डीपीआई के साथ परीक्षण किया 100 करने के लिए सेट:
यहाँ मेरी मंच उपयोगकर्ताओं जहाँ हम हार्डवेयर की एक विस्तृत विविधता पर इस मुद्दे को डिबग करने की कोशिश के साथ पूरा चर्चा (अतिरिक्त डीबग लॉग पोस्ट में शामिल किए गए हैं) है यह सुनिश्चित करने के लिए कि ट्रिगर क्रिएटर संस्करण में पेश किए गए डीपीआई परिवर्तन से संबंधित नहीं है।
क्या किसी को पता है कि यह किस प्रकार ट्रिगर करता है? और क्या कोई काम है?
***** अद्यतन 1 *****
कम से कम प्रारंभिक परीक्षण में, "DrawTextExW" भी प्रदर्शन नुकसान से प्रभावित हो रहा है। उपयोग में फ़ॉन्ट परीक्षण के दौरान है एरियल और प्रदर्शन समस्याएं फ़ॉन्ट के आकार से संबंधित प्रतीत होती हैं क्योंकि उपयोगकर्ता ने रिपोर्ट की है कि स्क्रीन पर अधिक निचले आकार की रेखाएं जोड़ना (निचले रिज़ॉल्यूशन पर अधिक टेक्स्ट प्रदान किया जाता है) प्रदर्शन में काफी सुधार करता है। https://github.com/bLightZP/WindowsTextRenderingProfiler
ऐसा लगता है इस मुद्दे पर निर्भर करता है:
***** अपडेट 2 *****
मैं एक छोटे से उपकरण इस मुद्दे जो आप इस GitHub भंडार में पा सकते हैं प्रोफ़ाइल को पत्र लिखा फ़ॉन्ट आकार, उदाहरण के लिए, 2560x1440 स्क्रीन पर, "34" के आकार के साथ "35" 21ms के आकार के साथ "एरियल" फ़ॉन्ट टेक्स्ट की एक पंक्ति प्रस्तुत करने में 2ms लग गए।
यह 32 बिट पिक्सेल प्रारूप के साथ डेल्फी टीबीटमैप के एचडीसी में प्रस्तुत किया जाता है और क्लिपिंग को अक्षम करने पर प्रदर्शन पर मामूली प्रभाव पड़ता है।
***** अद्यतन 3 *****
नीचेसेबस्टियन जेड के जवाब प्रदर्शन के संस्करण के स्तर को बहाल करता है पूर्व रचनाकारों और मैं उसका जवाब प्रतिबिंबित करने के लिए GitHub पर नमूना कोड को अद्यतन किया है, लेकिन मेरे पास है चूंकि विंडोज 7 64 बिट और 1920x1080 स्क्रीन पर इस मुद्दे को पुन: पेश करने में सक्षम है, इसलिए यह विंडोज 10 निर्माता संस्करण या उच्च रिज़ॉल्यूशन डिस्प्ले तक ही सीमित नहीं है, जब फ़ॉन्ट गुणवत्ता एंटिलीएशिया पर सेट की जाती है तो ट्रिगर थ्रेसहोल्ड अधिक होता है। विंडोज 7 के तहत मेरे परीक्षण में, फ़ॉन्ट एरियल का उपयोग करके, ट्रिगर पॉइंट "110" (x10) धीमा या खराब प्रदर्शन का फ़ॉन्ट आकार बनाम "109" (तेज) का फ़ॉन्ट आकार था। और सेबस्टियन जेड के क्लीयरटाइप को अक्षम करने के जवाब के बाद विंडोज 10 में यह वही ट्रिगर थ्रेसहोल्ड मौजूद है।
क्या आप ETO_CLIPPED ध्वज को हटाते समय समान प्रदर्शन ड्रॉप प्राप्त करते हैं? बिटमैप (i। E। 24bpp या 32bpp) क्या रंग गहराई है? क्या यह एक डीआईबी या डीडीबी है? यह सबसे अच्छा होगा यदि आप एक [mcve] जोड़ते हैं तो SO उपयोगकर्ता पुन: पेश करने का प्रयास कर सकते हैं। – zett42
मैंने मूल पोस्ट को गिटहब प्रोजेक्ट के लिंक के साथ अपडेट किया जिसमें स्रोत कोड और एक निष्पादन योग्य शामिल है जिसे आप इसका परीक्षण करने के लिए उपयोग कर सकते हैं। अद्यतन में अन्य विवरण शामिल हैं। – bLight