मैं एक रेल 2.3 विकसित कर रहा हूं, रूबी 1.9.1 वेबप्लिकेशंस जो प्रत्येक अनुरोध से पहले गणना का एक गुच्छा करता है। प्रत्येक अनुरोध के लिए इसे 300 नोड्स और ~ 1000 किनारों वाले ग्राफ की गणना करना है। ग्राफ और उसके सभी नोड्स, किनारों और अन्य वस्तुओं को प्रत्येक अनुरोध (~ 2000 ऑब्जेक्ट्स) के लिए प्रारंभ किया जाता है - वास्तव में उन्हें मार्शल.लोड (मार्शल डंप()) का उपयोग करके एक अनचाहे कैश किए गए ग्राफ से क्लोन किया जाता है।रूबी 1.9 कचरा कोलेक्टर, जीसी.disable/सक्षम
प्रदर्शन यहां काफी समस्या है। अभी पूरा अनुरोध औसत 150ms में लेता है। मैंने तब देखा कि एक अनुरोध के दौरान, गणना के कुछ हिस्सों में यादृच्छिक रूप से अधिक समय लगता है। मान लीजिए कि यह कचरा कलेक्टर हो सकता है, मैंने जीसी डिसेबल और जीसी.एनेबल में अनुरोध लपेट लिया है, ताकि अनुरोध गणना और प्रतिपादन समाप्त होने तक कचरे के साथ इंतजार कर रहा हो।
def query
GC.disable
calculate
respond_to do |format| format.html {render} end
GC.enable
end
औसत अनुरोध में अब लगभग 100ms (50 एमएस कम) लगता है।
लेकिन मुझे यकीन है कि यह एक अच्छा/स्थिर समाधान है, मुझे लगता है कि ऐसा करने में कमी होनी चाहिए। क्या किसी को भी ऐसी ही समस्या का अनुभव है या उपरोक्त कोड के साथ समस्याएं देखती हैं?
कैश करने के लिए संभव नहीं है, गणना उपयोगकर्ता इनपुट पर निर्भर करती है। – seb