2015-11-04 7 views
6

मुझे एहसास हुआ है कि एक टचस्क्रीन का उपयोग करना (एक जो स्टाइलस & टच इवेंट उत्पन्न करता है और न केवल माउस इवेंट) उत्पन्न करता है, एक डब्ल्यूपीएफ एप्लिकेशन में यूआई थ्रेड पर महत्वपूर्ण ओवरहेड का कारण बनता है। यदि मैं स्क्रीन पर पर्याप्त उंगलियों को रखता हूं, तो आवेदन पर, और कुछ मशीनों पर उन्हें थोड़ा सा स्थानांतरित करने के लिए भी एक साधारण एप्लिकेशन को रोक दिया जा सकता है। यह काफी अजीब लगता है और इसके चेहरे पर, ज्यादातर मेरे नियंत्रण के बाहर। एक प्रोफाइलर का उपयोग करके मुख्य रूप से स्टाइलस लॉजिक/इनपुट प्रबंधक कोड (विंडोज़ इनपुट) और डिस्पैचर.गेटमेसेज रूटीन में काफी समय बिताया गया।क्या मैं एक WPF एप्लिकेशन में स्टाइलस/टच इनपुट के ओवरहेड को कम कर सकता हूं?

मैं इस तरह की चीज़ के लिए किसी भी "सर्वोत्तम प्रथाओं" को खोजने में सक्षम नहीं हूं और निकटतम समाधान जो मैं आ सकता हूं स्पर्श स्पर्श पूरी तरह से अक्षम करने के लिए था (MSDN: Disabling the RealTimeStylus) और अपने स्वयं के पूर्वावलोकन टचडाउन उत्पन्न करने के लिए स्वयं WM_TOUCH संदेशों में हुक/पूर्वावलोकनमाउसडाउन घटनाएं (यहां वर्णित प्रकार का वर्णन "एक और WPF केवल तरीका": CodeProject: WPF and multi touch) लेकिन यह कई बार अपने मुद्दों के बिना नहीं है और मुझे दीर्घकालिक समझदार समाधान के रूप में नहीं मारा जाता है। मैंने टनलिंग/बुलबुले को रोकने के लिए शुरुआती कार्यक्रमों को ध्वजांकित करने की भी कोशिश की; मैंने मुख्य पूर्वावलोकन दृश्य पर एक प्रयोग के रूप में संभाले गए प्रत्येक पूर्वावलोकनस्टाइलसमोव इवेंट (सबसे लगातार घटना) को ध्वजांकित किया और यह एक बड़ा लाभ प्रदान नहीं कर रहा था। जबकि ऊपर दिए गए कोडप्रोजेक्ट लिंक में कहा गया है कि बहु स्पर्श के लिए डब्ल्यूपीएफ में एक बग था (या है), मैंने पाया है कि मेरे डेवलपर सेटअप (कुछ वास्तविक व्यावसायिक सॉफ़्टवेयर के साथ मैं काम करता हूं) की तुलना में कम शक्तिशाली पीसी पर भी एकल स्पर्श एक समय में सेकंड के लिए अंतराल और स्टॉल करें और आप एकल-स्पर्श के साथ सीपीयू प्रदर्शन का निरीक्षण करने के लिए कार्य प्रबंधक/प्रोफाइलर का उपयोग करके असामान्य मात्रा में काम देख सकते हैं।

क्या मैं इन घटनाओं की आवृत्ति को कम करने के लिए कुछ भी कर सकता हूं (ईजी पूर्वावलोकनस्टाइलसमोव)? क्या मेरे पास अन्य विकल्प हैं या यह सब मेरे नियंत्रण से बाहर है?

जाहिर है, मैं सामान्य रूप से एप्लिकेशन की दक्षता में सुधार करने की कोशिश करने पर काम कर सकता हूं, लेकिन स्टाइलस/स्पर्श ऐसा लगता है कि इस तरह के एक बड़े प्रारंभिक प्रदर्शन ने हिट किया कि यह जानना अच्छा होगा कि मैं इसे कम करने के लिए क्या कर सकता हूं।

पूर्ण प्रकटीकरण: यह एक .NET 4.5 एप्लिकेशन है। मैंने टचस्क्रीन के विभिन्न मॉडलों/ब्रांडों पर कोई दृश्य अंतर नहीं होने की कोशिश की है। मेरा कंप्यूटर और एप्लिकेशन इस उम्मीद के साथ स्थापित किया गया है कि पुश-एंड-होल्ड व्यवहार बाएं माउस बटन को दबाए रखने के समान है, न कि राइट क्लिक इवेंट उत्पन्न करना। मैंने विंडोज 7 और विंडोज 8.1 मशीनों पर इसका कोई परीक्षण नहीं किया है।

नीचे दिया गया उदाहरण एक साधारण एप्लिकेशन है जिसका उपयोग मैंने परीक्षण करने के लिए किया था। जब मैं आवेदन खिड़की पर 10 ऊंगलियां रखें यह क्षण भर रुक जाता या कुछ कंप्यूटरों पर फ्रेम मैं का उपयोग किया है को छोड़ (दूसरों के अंतराल प्रदर्शित करने के लिए बहुत तेजी से हो सकता है लेकिन लोड वृद्धि कार्य प्रबंधक की तरह कुछ में मनाया जा सकता):

<Window x:Class="SimpleApplication.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:SimpleApplication" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Rectangle Fill="Aqua" Width="150" Height="150" RenderTransformOrigin="0.5, 0.5"> 
     <Rectangle.RenderTransform> 
      <RotateTransform /> 
     </Rectangle.RenderTransform> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Loaded"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" 
             To="-360" 
             Duration="0:0:2" 
             RepeatBehavior="Forever" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 
</Grid> 

एक i7-2600 3.4GHz प्रोसेसर के साथ मेरी मशीन पर अंतराल नहीं है, लेकिन यह एक कोर 2 डुओ 2.93GHz प्रोसेसर के साथ मेरी मशीन पर अंतराल करता है।

+0

आप इस करता है, तो पुष्टि कर सकते हैं नेट 4.6 में कोई बेहतर हो जाता है? मुझे याद है कि उन्होंने 4.6 में टच स्टैक के लिए प्रदर्शन सुधार किए हैं, लेकिन मुझे अभी वास्तविक स्रोत नहीं मिल रहा है। –

+0

मैंने इसे 4.6 का उपयोग करके दो मशीनों पर परीक्षण परीक्षण दिया है और दुख की बात नहीं है, मैं जो कुछ भी बता सकता हूं उससे कोई महत्वपूर्ण/समझने योग्य/मापनीय अंतर नहीं था। Realtimestylus अक्षम करने के लिए लिंक के लिए – Rory

+0

+1। मेरे लिए कि लघु विधि .NET 3.5 के साथ कुछ उचित में प्रदर्शन लाया। मैं @Rory से सहमत हूं कि यह एक पूर्ण समाधान नहीं है, लेकिन अभी यह एक काम करने वाला पैच है। –

उत्तर

2

डब्ल्यूपीएफ टीम ने 4.6 और 4.6.1 में कुछ स्पर्श फिक्स किए। (मैं डब्ल्यूपीएफ टीम पर एक सॉफ्टवेयर इंजीनियर हूं)

इस काम को पढ़ने के बाद, उस काम करने वाले अभियंता ने कहा: * हाँ 4.6.1 ने उसमें काफी मदद की होनी चाहिए। * उन्हें यह भी सुनिश्चित करना चाहिए कि टच इवेंट्स के बाहर भारी प्रसंस्करण किया जाता है क्योंकि इससे मुख्य धागा बांध जाएगा।

4.6.1 रिलीज उम्मीदवार अक्टूबर 2015 में उपलब्ध कराया गया था।

धन्यवाद, रोब Relyea

http://twitter.com/rrelyea

2

रिहाई .नेट फ्रेमवर्क 4.6.1 के लिए नोट आर सी का दावा है कि स्पर्श ढेर प्रदर्शन में सुधार किया गया है। विवरण लगता है जैसे यह इस मुद्दे को संबोधित करेगा।

टच ढेर प्रदर्शन समर्थन वालों के साथ सुधार किया गया है घटनाओं को छूने के लिए ऐसी है कि मौजूदा स्थिति एक यूआई धागा माउस सूचक आंदोलनों के समान विलंब के बाद बताया जाता है जोड़ा

http://blogs.msdn.com/b/dotnet/archive/2015/10/29/announcing-net-framework-4-6-1-rc.aspx

संबंधित मुद्दे