ADO.NET 2.0 中的新增 DataSet 功能--性能提高44倍?(GridView VS Datagrid)

ADO.NET 2.0 中的新增 DataSet 功能--MSDN(downmoon翻译成Csharp)
  原文地址:http://www.microsoft.com/china/MSDN/library/data/dataAccess/adonetdatasetenhance.mspx?mfr=true

  本文主要帮助读者了解有关 .NET Framework DataSet 类以及与它密切相关的类中的新增 ADO.NET 2.0 功能的知识。这些更改包括对 DataSet、DataTable 和 DataView 类的功能和性能增强。


  因为原文代码用的是vb.net,阅读起来不便,邀月翻译成Csharp2005,方便大家阅读。呵呵!


 private void button1_Click(object sender, EventArgs e)
        
{
            
//下列代码在vs2005下执行40秒!
            //在vs2003下执行30分钟!!增加44倍!!

            DataSet ds = new DataSet();
            System.DateTime time1 
= new System.DateTime();
            System.TimeSpan ts 
= new TimeSpan();
            System.Timers.Timer tm 
= new System.Timers.Timer();
            tm.Enabled 
= true;
            tm.Interval 
= 1000;
            
int i;
            
int SPsecond = 0;
            DataRow dr;
            ds.Tables.Add(
"BigTable");
            ds.Tables[
0].Columns.Add("ID", Type.GetType("System.Int32"));
            ds.Tables[
0].Columns["ID"].Unique = true;
            ds.Tables[
0].Columns.Add("Value", Type.GetType("System.Int32"));
            WaitLabel.Visible 
= true;
            
this.Cursor = Cursors.WaitCursor;
            
this.Refresh();
            time1 
= DateTime.Now;
            Random rand 
= new Random();
            
//Random ri = new Random(unchecked((int)DateTime.Now.Ticks));
            int value;
            
for (int k = 1; k <= 1000000; k++)
            
{
                
try
                
{
                    value 
= rand.Next();
                    dr 
= ds.Tables[0].NewRow();
                    dr[
"ID"= value;
                    dr[
"Value"= value;
                    ds.Tables[
0].Rows.Add(dr);
                }

                
catch (Exception ex)
                
{
                }

            }

            WaitLabel.Visible 
= false;
            
this.Cursor = this.DefaultCursor;
            ts 
= DateTime.Now - time1;
            SPsecond 
= ts.Seconds;
            MessageBox.Show(
"Elapsed Time: " + SPsecond.ToString() + "  Seconds");
            MessageBox.Show(
"count = " + ds.Tables[0].Rows.Count);
        }

        
private void button2_Click(object sender, EventArgs e)
        
{
            XMLFormat();
        }

        
private void XMLFormat()
        
{
            DataSet ds 
= new DataSet();
            System.Data.SqlClient.SqlDataAdapter da 
= new System.Data.SqlClient.SqlDataAdapter("select * from [order details]", GetConnectionString());
            da.Fill(ds);
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf 
= new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            
string FileName = "c:\" + DateTime.Now.ToString("yyyyMMddhhmmsslll"+ "xml20.txt";
            System.IO.FileStream fs 
= new System.IO.FileStream(FileName, System.IO.FileMode.CreateNew);
            bf.Serialize(fs, ds);
            MessageBox.Show(
"生成成功" + FileName + " " + "文件大小(b):" + fs.Length.ToString());
        }

        
private void BinaryFormat()
        
{
            DataSet ds 
= new DataSet();
            System.Data.SqlClient.SqlDataAdapter da 
= new System.Data.SqlClient.SqlDataAdapter("select * from [order details]", GetConnectionString());
            da.Fill(ds);
            
            
//下句使生成数据减少80%左右
            ds.RemotingFormat = SerializationFormat.Binary;

            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf 
= new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            
string FileName = "c:\" + DateTime.Now.ToString("yyyyMMddhhmmsslll"+ "Binary20.txt";
            System.IO.FileStream fs 
= new System.IO.FileStream(FileName, System.IO.FileMode.CreateNew);

            bf.Serialize(fs, ds);
            MessageBox.Show(
"生成成功" + FileName + " " + "文件大小(b):" + fs.Length.ToString());

        }

        
private string GetConnectionString()
        
{
            
//return MySettings.Value.NorthwindConnection;
            return "server=10.0.0.121;database=northwind;uid=sa;pwd=sa";
        }

        
private void button3_Click(object sender, EventArgs e)
        
{
            BinaryFormat();
        }

        
private void button4_Click(object sender, EventArgs e)
        
{
            getGridViewData();
        }

        
private void getGridViewData()
        
{
            
try
            
{
                SqlConnection connection 
= new SqlConnection(GetConnectionString());
                SqlCommand command 
= new SqlCommand("SELECT * from customers", connection);
                connection.Open();
                System.Data.SqlClient.SqlDataReader dr 
= command.ExecuteReader();
                
//Fill table with data from DataReader
                System.Data.DataTable dt = new DataTable();
                dt.Load(dr, LoadOption.OverwriteChanges);

                
// Display the data
                dataGridView1.DataSource = dt;

            }


            
catch (SqlException ex)
            
{
                MessageBox.Show(ex.Message);

            }

        }

  邀月总结:2.0对1.1的改进,不仅在DataSet,同样在GridView对于DataGrid性能的改进。应尽量摒弃Datagrid!这也是微软在2.0下默认不加载DataGrid的原因。

posted @ 2007-12-29 13:22  邀月  阅读(655)  评论(0编辑  收藏  举报