2011-06-20 10 views
5

मुझे SQL डेटाबेस में समृद्ध टेक्स्ट की महत्वपूर्ण मात्रा को स्टोर करने, इसे पुनर्प्राप्त करने और इसे प्रदर्शित करने की आवश्यकता है।समृद्ध पाठ को कुशलतापूर्वक संग्रहित और प्रदर्शित करना

भर में एक फ़ॉन्ट ठीक है लेकिन मुझे विभिन्न फ़ॉन्ट आकार/बोल्ड/रंगों की आवश्यकता है।

अभी के लिए मैं इसे प्रदर्शित करने के लिए एक RichTextBox (WPF) का उपयोग कर रहा हूं, और XamlWriter.Save/XamlReader.Parse को डीबी में स्टोर करने के लिए तारों को क्रमबद्ध करने के लिए। यह अच्छी तरह से काम करता है लेकिन RichTextBox पाठ को प्रदर्शित करने में इतनी धीमी गति से धीमा है कि यह मूल रूप से अनुपयोगी है।

क्या स्वीकार्य प्रदर्शन के साथ ऐसा करने का कोई त्वरित तरीका है?

मैं ग्लाइफ्रून ऑब्जेक्ट्स के साथ ऐसा करने पर विचार कर रहा हूं, प्रत्येक चरित्र को बिटमैप के रूप में चित्रित कर रहा हूं और गंतव्य छवि इत्यादि के लिए सभी संरेखण आवश्यकताओं की गणना कर रहा हूं ... लेकिन सरल रंगीन/बड़े पैमाने पर पाठ पर पहिया को फिर से शुरू करना 2011 में वास्तव में अजीब लगता है

संपादित करें: उत्तर के लिए धन्यवाद, अब तक उन्हें नहीं देखा, क्षमा करें।

उपयोगकर्ता द्वारा RichTextBox es से पाठ दर्ज किया गया है, मूल रूप से मैं डेटाबेस में stringXamlWriter.Save(richTextBox.Document) से बचता हूं। TextBox es से अन्य फ़ील्ड (डबल/इंट इत्यादि) भी उपयोगकर्ता द्वारा दर्ज किए जाते हैं।

उपयोगकर्ता डेटाबेस प्रश्नों के रूप में, रंग और स्वरूपण के साथ केवल पढ़ने के लिए रिच टेक्स्ट के पन्नों डेटाबेस में फ़ील्ड का उपयोग कर, बचाया रिच टेक्स्ट फ़ील्ड ऊपर सहित खरोंच से उत्पन्न होता है: इन FlowDocument रों से Span रों में बदल रही हैं और कुछ प्रतिस्थापन उन पर किया जाता है (InlineUIContainer एस जो UIElement से प्राप्त कक्षा होस्ट करता है जो पाठ में उल्लिखित डेटाबेस प्रविष्टि का संदर्भ देता है, जैसे "देखें [यह पुस्तक]" जहां [यह पुस्तक] कुछ डेटाबेस प्रविष्टि आईडी का संदर्भ देता है)। एमएसडीएन का कहना है कि TextBlock के लिए यह बहुत अधिक टेक्स्ट है।

वह पाठ प्रतिपादन वास्तव में धीमा हिस्सा है लेकिन इसके आसपास कोई रास्ता नहीं है, मुझे उस स्वरूपण की आवश्यकता है और यह वही है कि WPF RichTextBox es हैं: यहां तक ​​कि RichTextBox es में थोड़ा सा सरल टेक्स्ट दर्ज करते समय, देरी हो रही है टाइपिंग और चरित्र स्क्रीन पर प्रदर्शित होने ...

अभी के लिए के बीच मैं अभी भी RichTextBox तों का उपयोग, लेकिन मैं स्मृति में प्रदान की गई लेआउट के बहुत सारे (Paragraph/Section/Span वस्तुओं) रखने के लिए और मैं केवल कम से कम rerender करने के लिए सावधान कर रहा हूँ स्वरूपित पाठ की मात्रा जब परिवर्तन/क्वेरी किए जाते हैं या डेटाबेस डेटा के अलग-अलग विचार उपयोगकर्ता द्वारा अनुरोध किए जाते हैं।

यह अभी भी तेजी से नहीं है, लेकिन यह ठीक है, पूरी संरचना (AvalonEdit या FormattedText या GlyphRun) बदल रहा है इसके लायक अभी बहुत ज्यादा काम नहीं लगता है,, XamlWriter.Save और XamlReader.Parse साथ पूरे क्रमबद्धता एपीआई FormattedText के लिए बहुत (सरल करता है और GlyphRun, स्वरूपित पाठ को डेटाबेस में सहेजने के लिए मुझे स्वयं फ़ाइल प्रारूप के साथ आना होगा)।

वहाँ भी माइक्रोसॉफ्ट वर्ड .docx दस्तावेज़ बनाने के लिए OpenXML SDK उपयोग करने की संभावना है, लेकिन गूगल का कहना है कि प्रतिपादन प्रदर्शन या तो महान नहीं है, और मैं अगर एक InlineUIContainer और serializing भीतर पाठ में एक UIElement embedding पता नहीं है डेटाबेस में सहेजने के लिए संभव होगा (AvalonEdit के साथ एक ही समस्या)।

+0

कैसे पाठ पहली जगह में उत्पन्न होता है? क्या आप फिक्स्ड डॉक्यूमेंट का उपयोग कर सकते हैं? –

+1

आप किस बारे में बात कर रहे हैं? मैंने FlowDocumentViewer में विशाल WPF फ़्लो दस्तावेज़ों के साथ काम का एक गुच्छा किया है और चीजें बहुत अच्छी तरह से काम करती हैं। आपको शायद एक प्रोफाइलर को आग लगाना चाहिए और देखें कि आप अपना समय कहां खर्च कर रहे हैं; पाठ प्रस्तुत करना * आईएस * डब्ल्यूपीएफ के लिए एक महंगा ऑपरेशन है, लेकिन आप यह सुनिश्चित करना चाहते हैं कि आप अजीब दस्तावेज़ संरचना या शैलियों/रंगों/फोंट/हाइफेनेशन/आदि के कारण सीपीयू कंप्यूटिंग लेआउट नहीं उड़ रहे हैं। – Armentage

उत्तर

1

RichTextBox को फेंकने पर विचार करें क्योंकि यह बहुत धीमी गति से है (स्पॉट ऑन)।अपना खुद का टेक्स्ट एडिटर लिखने के बजाय AvalonEdit देखें। प्रदर्शन के अनुसार यह एक बच्चे की तरह RichTextBox धड़कता है।

या आप केवल पढ़ने के लिए आप एक TextBlock की कोशिश कर सकते पाठ की जरूरत है - यह सरल स्वरूपण का समर्थन करता है:

<TextBlock> 
    <Run FontWeight="Bold">Hello</Run> 
    <Run Foreground="Green">World</Run> 
    <Run FontSize="24">!</Run> 
</TextBlock> 
+0

धन्यवाद, मूल प्रश्न में संपादित करें देखें। – SemMike

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