मैं एक कण इंजन लिख रहा हूं और देखा है कि यह होना चाहिए जितना धीमा होना चाहिए (मैंने अत्यधिक अन-अनुकूलित 3 डी सी ++ कण इंजन लिखे हैं जो 50 एफ कणों को 60 एफपीएस पर प्रस्तुत कर सकते हैं, यह लगभग 1.2 एफपीएस पर गिर जाता है 1.2 के ..), मैंने कणों के प्रतिपादन को मानते हुए कोड पर कुछ विश्लेषण किया था या घूर्णन सबसे अधिक CPU गहन ऑपरेशन थे, हालांकि मुझे पता चला कि वास्तव में ग्राफिक्स ऑब्जेक्ट के इन दो छोटे गुण वास्तव में 70% से अधिक खा रहे हैंग्राफिक्स। ट्रांसफॉर्म व्यापक रूप से अक्षम है, मैं इसके बारे में क्या कर सकता हूं?
g.Transform = m;
g.Transform = m2;
: मेरे प्रदर्शन ....
public void RotateParticle(Graphics g, RectangleF r,
RectangleF rShadow, float angle,
Pen particleColor, Pen particleShadow)
{
//Create a matrix
Matrix m = new Matrix();
PointF shadowPoint = new PointF(rShadow.Left + (rShadow.Width/1),
rShadow.Top + (rShadow.Height/1));
PointF particlePoint = new PointF(r.Left + (r.Width/1),
r.Top + (r.Height/2));
//Angle of the shadow gets set to the angle of the particle,
//that way we can rotate them at the same rate
float shadowAngle = angle;
m.RotateAt(shadowAngle, shadowPoint);
g.Transform = m;
//rotate and draw the shadow of the Particle
g.DrawRectangle(particleShadow, rShadow.X, rShadow.Y, rShadow.Width, rShadow.Height);
//Reset the matrix for the next draw and dispose of the first matrix
//NOTE: Using one matrix for both the shadow and the partice causes one
//to rotate at half the speed of the other.
g.ResetTransform();
m.Dispose();
//Same stuff as before but for the actual particle
Matrix m2 = new Matrix();
m2.RotateAt(angle, particlePoint);
//Set the current draw location to the rotated matrix point
//and draw the Particle
g.Transform = m2;
g.DrawRectangle(particleColor, r.X, r.Y, r.Width, r.Height);
m2.Dispose();
}
अपने प्रदर्शन क्या मार रहा है विशेष रूप से इन लाइनों है
एक छोटी सी पृष्ठभूमि, ग्राफिक्स ऑब्जेक्ट दर्द निवारक से पकड़ा जा रहा है, फिर यह रेंडर कण विधि में स्क्रीन पर कणों को प्रतिपादित कर रहा है, जो इस विधि को किसी भी घूर्णन करने के लिए कहते हैं, बहु-थ्रेडिंग ग्राफिक्स ऑब्जेक्ट के रूप में समाधान नहीं है एकाधिक धागे के बीच साझा नहीं किया जा सकता है।
https://gyazo.com/229cfad93b5b0e95891eccfbfd056020
मैं थोड़े इस सोच रहा हूँ कुछ है कि वास्तव में मदद नहीं किया जा सकता है, क्योंकि यह संपत्ति की तरह दिखता है: यहाँ कोड विश्लेषण मैं सिर्फ ताकि आप देख सकते हैं कि रूप में अच्छी तरह हो रहा है भाग गया के लिए एक लिंक है खुद प्रदर्शन को नष्ट कर रहा है और कुछ भी नहीं जो मैंने वास्तव में किया है (हालांकि मुझे यकीन है कि सुधार के लिए जगह है), खासकर जब से कक्षा में कॉल करने वाले डीएलएल सबसे सीपीयू पावर का उपयोग कर रहे हैं। वैसे भी, किसी भी मदद की इसे अनुकूलित करने की कोशिश में बहुत सराहना की जाएगी ... शायद मैं प्रदर्शन बढ़ाने के लिए रोटेशन को सक्षम/अक्षम कर दूंगा, हम देखेंगे ...
इसके अलावा मैं छवि के लिए क्षमा चाहता हूं, मुझे पता है कि यह वास्तव में छोटा है, अगर आप झुकाते हैं तो आप संख्याओं को देख सकते हैं! : पी –