1

グリッドに150万をロードするアプリケーションがあります。問題は、大量のメモリを必要とすることです。(1.8 GB)

私は次のことを観察しました、

  • SQLクエリアナライザで実行した場合、同じクエリで約60MBかかります
  • アプリケーションでは、ExecuteNonQuery()を実行するだけで、約60MBもかかります。

DataTableとして出力するために実行すると問題が発生しますが、実行方法に問題があると感じています。助けてください。

これが私がそれを行う方法です(私がSPを呼び出しても、それは私がパラメーターとして渡すsqlも実行します)

                    using (var conn = new SqlConnection(connStr))
                    {
                        SqlCommand command = conn.CreateCommand();
                        //DbCommand command = conn.CreateCommand();
                        command.CommandTimeout = 30000;
                        conn.Open();
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandText = spName;
                        SqlDataAdapter da = new SqlDataAdapter(command);
                        dt = new DataTable();
                        da.Fill(dt);
                        if (dt != null)
                        {
                            if (dt.Rows.Count == 0)
                            {
                                dt = null;
                            }
                        }
                        conn.Close();
                    }
4

2 に答える 2

1

テキストファイルからデータテーブル/データグリッドに大量のデータをロードするときに、同様の問題に直面しました。私が読み込んでいるデータの多くは、ファイルが多くのバリエーションを持つさまざまなソースから来ているため、簡単に入力できないため、すべてテキスト列として単純に読み込まれます。読み込んでいるデータの多くは、単に 1 文字の長さです

この記事では、.NET における文字列のオーバーヘッドと、これがたった 1 文字の多数の要素に与える影響について説明します。ANTs プロファイラーを使用した例を提供します。試用版を入手し、使用方法を確認するために使用しました。私が持っていたデータのバリエーションのため、列の型を調整することはできませんでしたが、文字列以外のものとして型指定できるデータの列がある場合は、いくつかの重要な改善が見られるかもしれません.

于 2011-06-28T04:47:38.547 に答える
0

おそらく、ある種のページングまたは「ロードオンデマンド」を実装できますか?

このメソッドを2回実行すると、古いデータテーブルが破棄されますね。

于 2011-06-28T04:59:19.633 に答える