-4

Windows 7 PRO と 64 GB の RAM を搭載した SQL Server 2012 Developer エディションを実行しています。

多くのインメモリ リクエストを実行すると、System.OutOfMemoryException がスローされます。

SQL がより多くの物理 RAM を使用できるようにする簡単な修正方法はありますか?

コード:

// int count = MAX_BARS_IN_MEMORY / tf.timeperiod + 1;
                    hCommandBars.CommandText = String.Format(@"SELECT top " +     MAX_BARS_IN_MEMORY + " * FROM {0} WHERE {0}.timeperiod = " + tf.timeperiod + " ORDER BY     {0}.bartime desc", tableName);
                    barTimesAdapter = new SqlDataAdapter(hCommandBars);
                    barTimesAdapter.Fill(dTimeset);
                    foreach (DataTable table in dTimeset.Tables)
                    {
                        if (table.Rows.Count > 0)
                        {

                            foreach (DataRow row in table.Rows)
                            {
                                InMemoryTable inMemorytable = new InMemoryTable();
                                inMemorytable.BarTime = Convert.ToDateTime((row["bartime"].ToString()));
                                inMemorytable.High = Convert.ToDouble(row["high"].ToString());
                                inMemorytable.Low = Convert.ToDouble(row["low"].ToString());
                                inMemorytable.Open = Convert.ToDouble(row["open"].ToString());
                                inMemorytable.Close = Convert.ToDouble(row["close"].ToString());
                                inMemorytable.C1 = Convert.ToDouble(row["c1"].ToString());
                                inMemorytable.C2 = Convert.ToDouble(row["c2"].ToString());
                                inMemorytable.SNR2 = false;
                                inMemorytable.Symbol = symbol.Key;//symbol name
                                inMemorytable.TimePeriod = Convert.ToInt32(row["timeperiod"].ToString());

                                _SessAndBarTableList.Add(inMemorytable);
                            }
                        }
                    }
                    dTimeset.AcceptChanges();
                    dTimeset.Clear();
                }





            hConnectionBars.Close();
            hConnectionBars.Dispose();
            hConnectionBars = null;
        //});
        }

         _SessAndBarTableList = _SessAndBarTableList.OrderBy(x => x.BarTime).ToList();
         _1MinuteTableList = _1MinuteTableList.OrderBy(x => x.BarTime).ToList();
    }
4

1 に答える 1

1

SqlDataReader1 つの解決策は、ではなくを使用することDataSetです。これにより、サーバーからすべてのデータを 1 つの大きなチャンクで取得できなくなり、問題が解決する可能性があります。ただし、多くの行を返す場合でも、テーブルにアイテムを追加する際に問題が発生する可能性があります。

これらの大きなクエリは何行を返しますか?

于 2013-01-30T00:35:05.063 に答える