मैंने वास्तव में इसे हल कर लिया है, लेकिन मैं इसे पोस्टीरिटी के लिए पोस्ट कर रहा हूं।
मैं अपने दोहरे मॉनिटर सिस्टम पर DataGridView के साथ एक बहुत ही अजीब मुद्दे में भाग गया। समस्या अपने आप में नियंत्रण के एक धीमी गति से पुनरावृत्ति के रूप में प्रकट होती है ( जैसे पूर्ण प्रतिनिधि के लिए 30 सेकंड ), लेकिन केवल जब यह मेरी एक स्क्रीन पर है। जब दूसरे पर, दमन गति ठीक है।
मेरे पास नवीनतम गैर-बीटा ड्राइवरों (175. कुछ) के साथ एनवीडिया 8800 जीटी है। क्या यह ड्राइवर बग है? मैं इसे हवा में छोड़ दूंगा, क्योंकि मुझे इस विशेष विन्यास के साथ रहना है। (यह अति कार्ड पर नहीं होता है, हालांकि ...)
रंग की गति का सेल सामग्री के साथ कोई लेना-देना नहीं है, और कस्टम ड्राइंग प्रदर्शन को बेहतर नहीं करता है - यहां तक कि जब सिर्फ एक ठोस आयत पेंटिंग।
मुझे बाद में पता चला कि फॉर्म पर एक ElementHost (System.Windows.Forms.Integration namespace) रखने से समस्या ठीक हो जाती है। इसके साथ खिलवाड़ नहीं करना है; यह सिर्फ उस प्रपत्र का एक बच्चा होने की आवश्यकता है जिस पर DataGridView भी चालू है। इसे (0, 0) के रूप में देखा जा सकता है, जब तक दृश्यमान गुण सत्य है।
मैं अपने आवेदन में .NET 3 / 3.5 निर्भरता को स्पष्ट रूप से जोड़ना नहीं चाहता; मैं रनटाइम पर इस नियंत्रण को बनाने के लिए एक विधि बनाता हूं (यदि यह हो सकता है) प्रतिबिंब का उपयोग कर। यह काम करता है, और कम से कम यह उन मशीनों पर इनायत से विफल हो जाता है जिनके पास आवश्यक पुस्तकालय नहीं है - यह बस धीमा होने के लिए वापस जाता है।
यह विधि मुझे एप को चलाने के दौरान ठीक करने के लिए आवेदन करने की सुविधा भी देती है, जिससे यह देखना आसान हो जाता है कि WPF लाइब्रेरी मेरे फॉर्म में क्या बदल रही है (स्पाई ++ का उपयोग करके)।
बहुत परीक्षण और त्रुटि के बाद, मैंने नोटिस किया कि नियंत्रण पर डबल बफ़रिंग को सक्षम करना (केवल फॉर्म के विपरीत) समस्या को ठीक करता है!
इसलिए, आपको केवल डेटाग्रिडव्यू के आधार पर एक कस्टम क्लास बनाने की आवश्यकता है ताकि आप इसके डबलबेरिंग को सक्षम कर सकें। बस!
class CustomDataGridView: DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}
जब तक ग्रिड के मेरे सभी उदाहरण इस कस्टम संस्करण का उपयोग कर रहे हैं, तब तक सब ठीक है। अगर मैं कभी इस वजह से किसी स्थिति में भाग जाता हूं, जहां मैं उपवर्ग समाधान (यदि मेरे पास कोड नहीं है) का उपयोग करने में सक्षम नहीं है, तो मुझे लगता है कि मैं उस नियंत्रण को फॉर्म पर इंजेक्ट करने की कोशिश कर सकता हूं :) ( हालांकि मैं ' एक बार फिर से निर्भरता से बचने के लिए डबलबर्फर की गई संपत्ति को बाहर से लाने के लिए प्रतिबिंब का उपयोग करने की कोशिश करने की अधिक संभावना होगी ।
यह दुखद है कि इतनी मामूली सी बात मेरे समय का इतना खा गई ...