Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

GetOracleDecimal मेमोरी लीक

यह ODP.NET के साथ एक पुराना मुद्दा है (यहां देखें:ODP के साथ स्मृति समस्याएं .NET 10.1.0.4 )।

OracleDecimal type OpoDecCtx . नामक आंतरिक वर्ग के एक उदाहरण का संदर्भ रखता है . OpoDecCtx IDisposable लागू करता है (क्योंकि यह स्वयं अप्रबंधित स्मृति का संदर्भ दे रहा है), लेकिन चूंकि OracleDecimal IDisposable को लागू नहीं करता है, इसलिए आपको अंतर्निहित अप्रबंधित स्मृति को मुक्त करने के लिए कचरा संग्रहकर्ता को चलाने के लिए प्रतीक्षा करनी होगी। आप .NET रिफ्लेक्टर जैसे टूल का उपयोग करके यह सब देख सकते हैं।

यद्यपि यह तकनीकी रूप से एक "भौतिक" स्मृति रिसाव नहीं है (स्मृति अंततः मुक्त हो जाएगी), यह वास्तव में एक समस्या है जब आप OracleDecimal प्रकार के बड़ी मात्रा में उदाहरणों से निपट रहे हैं। मुझे नहीं पता कि Oracle केवल IDisposable को लागू क्यों नहीं करता है, यह एक साधारण सी बात है...

वैसे भी, मेरा सुझाव है कि आप प्रतिबिंब का उपयोग करके स्वयं कुछ हैक कार्य करें:

public static class OracleExtentions
{
    public static void Dispose(this OracleDecimal od) // build an extension method
    {
        if (OracleDecimalOpoDecCtx == null)
        {
            // cache the data
            // get the underlying internal field info
            OracleDecimalOpoDecCtx = typeof(OracleDecimal).GetField("m_opoDecCtx", BindingFlags.Instance | BindingFlags.NonPublic);
        }
        IDisposable disposable = OracleDecimalOpoDecCtx.GetValue(od) as IDisposable;
        if (disposable != null)
        {
            disposable.Dispose();
        }
    }

    private static FieldInfo OracleDecimalOpoDecCtx;
}

और आप इसे इस तरह इस्तेमाल करेंगे:

OracleDecimal od = reader.GetOracleDecimal(5);
decimal volume = (decimal)OracleDecimal.SetPrecision(od, 28);
od.Dispose();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. केवल एक कॉलम द्वारा Oracle समूह

  2. सीएक्स ओरेकल आयात त्रुटि

  3. कैसे एक सबक्वेरी का उपयोग किए बिना अधिकतम अनुक्रम के साथ केवल पंक्ति का चयन करने के लिए?

  4. टी-एसक्यूएल:आप सेलेक्ट के साथ टेबल कैसे बना सकते हैं?

  5. एक-से-निरंतर संबंध मॉडलिंग