Exception: System.OutOfMemoryExceptionMessage: Exception of type 'System.OutOfMemoryException' was thrown.StackTrace:    at System.Text.StringBuilder.ToString()
   at System.String.Format(IFormatProvider provider, String format, Object[] args)
   at System.String.Format(String format, Object[] args)
   at ClientBackServer.CDBLog.ProcessLogDBOldThread()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()asp.net

解决方案 »

  1.   

    ThreadStart()干什么了?
    里面做神马操作把内存耗尽了??
      

  2.   

    内存不够?检查下代码ThreadHelper.ThreadStart()都干吗了
      

  3.   

     string sCon =ConfigurationManager.ConnectionStrings["sqlData"].ConnectionString;                           
                DateTime m_timePrev = DateTime.Now;           
                SqlConnection connection = new SqlConnection(sCon);
                connection.Open();
                SqlTransaction tans = connection.BeginTransaction();
                SqlCommand command = new SqlCommand();            
                command.Connection = connection;
                command.Transaction = tans;
                bool bHaveTrans=false;//表明是否有提交
                while (true)
                {
                    if (m_threadExitEvent.WaitOne(0))
                    {
                        //线程退出
                        if (m_QueueDBLog.Count == 0 && bHaveTrans == false)
                            break;
                    }
                    m_SemaphoreDBLog.WaitOne(500);
                    DateTime Now = DateTime.Now;
                    TimeSpan span = Now - m_timePrev;
                    if (m_QueueDBLog.Count > 0)
                    {
                        Log_Pattern log = (Log_Pattern)m_QueueDBLog.Dequeue();
                        string sSql = string.Empty;
                        try
                        {
                            sSql = string.Format("insert into Tbl_system_Log(QueryID,sModuleName,sLogLevel,nErrorCode,sErrorMessage,time)" +
                                            " values(\'{0}\',\'{1}\',\'{2}\',\'{3}\',\'{4}\',{5})",
                                            log.sSessionID,
                                            MODULE_NAME.Module_Names[Convert.ToInt32(log.nModuleID)],
                                            LOGLEVEL_NAME.LogLevelNames[Convert.ToInt32(log.nLogLevel)],
                                            log.nErrorCode, log.sMsg, "getdate()");                        SqlBaseOperate.ExecuteTransNonQuery(ref command, sSql);
                            bHaveTrans = true;
                        }
                        catch (Exception ex)
                        {
                            //测试  OutOfMemoryException  ycb
                            GC.Collect();
                            string sError = "数据库日志记录失败!错误信息:" + ex.Message + ".sql语句为:" + sSql;
                            StockWebServierBase.PushLog(StockWebServierBase.sSessionID, MODULE_ID.DB_OPERATING, LOGLEVEL.FAULT_LEVEL, LOGTYPE.DB_LOG, 0, sError);
                        }
                    }
                    //如果有要提交的数据,并且提交时间大于3秒
                    if (span.Milliseconds > Convert.ToInt32(StockWebServierBase.m_mapSystemCfgParam["DbCommitInterval"]) && bHaveTrans)
                    {
                        try
                        {
                            SqlBaseOperate.ExecuteCommitTrans(ref tans);
                            connection.Close();
                            connection.Dispose();
                            connection = new SqlConnection(sCon);
                            connection.Open();
                            tans = connection.BeginTransaction();
                            command.Connection = connection;
                            command.Transaction = tans;
                            bHaveTrans = false;//已经没有数据
                            m_timePrev = Now;
                        }
                        catch (Exception ex)
                        {
                            string sError = "数据库日志记录执行提交失败!错误信息:" + ex.Message ;
                            StockWebServierBase.PushLog(StockWebServierBase.sSessionID,MODULE_ID.DB_OPERATING, LOGLEVEL.FAULT_LEVEL, LOGTYPE.DB_LOG, 0, sError);
                        }
                    }
                }           
                connection.Close();