Visual Studio 2008初试

  早先就听说微软推出了visual Studio 2008的测试版,但一直没有碍于下载速度和出于对2005的习惯,未得一试,只到前两天布署上Sql server 2005,才将这个庞然大物拉下来。
   安装一如从前的便捷,界面上有了改进,更炫,付出的代价是速度更慢。

Visual Studio 2008初试
 
  前端页面的编辑视图栏里,增加了“拆分”视图,有如Dreamweaver,从此不必假其他工具而“立改立见”
 
  内置Ajax Extensions工具集,正好一试,以前用Anthem和prototype比较多

  内置对dot net Framework 3.5的支持,轻松创建WPF程序

  内置代码测试和性能分析工具


  新功能方面有待摸索,目前最感兴趣的是与数据库的集成开发,做一个小用例测试一下Sql CLR存储过程重复插入数据性能:

  在DB中,存在表 TB_COUNTRY,结构如:
 Visual Studio 2008初试

  创建一Sql Server CLR项目,并为其添加存储过程AddCountryMillons,实现重复插入百W记录,结束时返回统计用时长度:

Visual Studio 2008初试using System;
Visual Studio 2008初试
using System.Data;
Visual Studio 2008初试
using System.Data.SqlClient;
Visual Studio 2008初试
using System.Data.SqlTypes;
Visual Studio 2008初试
using Microsoft.SqlServer.Server;
Visual Studio 2008初试
Visual Studio 2008初试
public partial class CountryProc
Visual Studio 2008初试Visual Studio 2008初试
Visual Studio 2008初试{
Visual Studio 2008初试Visual Studio 2008初试    
/**//// <summary>
Visual Studio 2008初试    
/// 连接串
Visual Studio 2008初试    
/// </summary>

Visual Studio 2008初试    public const string CONN_MOYE2005_STRING = @"Data Source=ZHANGCHI\MOYE2005;Initial Catalog=Indie;User Id=sa;Password=system;";
Visual Studio 2008初试    
Visual Studio 2008初试Visual Studio 2008初试    
/**//// <summary>
Visual Studio 2008初试    
/// 插入百万条记录,返回用时(秒数)
Visual Studio 2008初试    
/// </summary>

Visual Studio 2008初试    [Microsoft.SqlServer.Server.SqlProcedure]
Visual Studio 2008初试    
public static int AddCountryMillons(string EName, string CName)
Visual Studio 2008初试Visual Studio 2008初试    
Visual Studio 2008初试{
Visual Studio 2008初试        
if (EName.Trim() == string.Empty || CName.Trim() == string.Empty)
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{
Visual Studio 2008初试            
return 0;
Visual Studio 2008初试        }

Visual Studio 2008初试
Visual Studio 2008初试        
using (SqlConnection conn = new SqlConnection(CONN_MOYE2005_STRING))
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{
Visual Studio 2008初试            
try
Visual Studio 2008初试Visual Studio 2008初试            
Visual Studio 2008初试{
Visual Studio 2008初试                conn.Open();
Visual Studio 2008初试                
// insert a record
Visual Studio 2008初试
                SqlCommand cmd = new SqlCommand(
Visual Studio 2008初试                    
string.Format("INSERT INTO TB_COUNTRY(CountryEName,CountryName) VALUES('{0}','{1}')",
Visual Studio 2008初试                        EName, CName),
Visual Studio 2008初试                    conn);
Visual Studio 2008初试                
// excute millons                
Visual Studio 2008初试
                TimeSpan span = TimeSpan.Zero;
Visual Studio 2008初试                DateTime begin 
= DateTime.Now;
Visual Studio 2008初试
Visual Studio 2008初试                
for (int i = 0; i < 1000000; i++)
Visual Studio 2008初试Visual Studio 2008初试                
Visual Studio 2008初试{
Visual Studio 2008初试                    cmd.ExecuteNonQuery();
Visual Studio 2008初试                }

Visual Studio 2008初试                DateTime done 
= DateTime.Now;
Visual Studio 2008初试                span 
= done - begin;
Visual Studio 2008初试                
return Convert.ToInt32(span.TotalSeconds);
Visual Studio 2008初试            }

Visual Studio 2008初试            
catch (Exception err)
Visual Studio 2008初试Visual Studio 2008初试            
Visual Studio 2008初试{
Visual Studio 2008初试                
return -1;
Visual Studio 2008初试            }

Visual Studio 2008初试            
finally
Visual Studio 2008初试Visual Studio 2008初试            
Visual Studio 2008初试{
Visual Studio 2008初试                conn.Close();
Visual Studio 2008初试            }

Visual Studio 2008初试        }

Visual Studio 2008初试    }

Visual Studio 2008初试}
;
Visual Studio 2008初试

  创建Web项目,添加对SQL CLR项目的引用,制作页面并最终显示执行的时长
   由于存储过程插入数据量大,为不出现阻塞现象,在此使用“委托异步回调+Ajax客户端”方式呈现结果

  页面结构如下
Visual Studio 2008初试<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Vs2008_Project._Default" StylesheetTheme="Home" %>
Visual Studio 2008初试
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Visual Studio 2008初试
<html xmlns="http://www.w3.org/1999/xhtml" >
Visual Studio 2008初试
<head runat="server">
Visual Studio 2008初试    
<title>visual Studio 2008 Demo</title>
Visual Studio 2008初试
</head>
Visual Studio 2008初试
<body>
Visual Studio 2008初试    
<form id="form1" runat="server">
Visual Studio 2008初试    
<div>    
Visual Studio 2008初试        国家中文名称:
<asp:TextBox ID="txtCName" runat="server"></asp:TextBox>
Visual Studio 2008初试        
<br />
Visual Studio 2008初试        国家英文名称:
<asp:TextBox ID="txtEName" runat="server"></asp:TextBox>    
Visual Studio 2008初试        
<br />
Visual Studio 2008初试        
<div>
Visual Studio 2008初试            
<asp:ScriptManager ID="ScriptManager1" runat="server">        
Visual Studio 2008初试            
</asp:ScriptManager>
Visual Studio 2008初试        
</div>        
Visual Studio 2008初试        
<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Block">
Visual Studio 2008初试            
<ContentTemplate>
Visual Studio 2008初试            
<ul>
Visual Studio 2008初试                
<li>
Visual Studio 2008初试                    
<asp:Label ID="lblRes" runat="server" Text="Label"></asp:Label>
Visual Studio 2008初试                
</li>
Visual Studio 2008初试                
<li>
Visual Studio 2008初试                    
<asp:Button ID="btAdd" runat="server" Text="执行插入" onclick="btAdd_Click" />
Visual Studio 2008初试                
</li>
Visual Studio 2008初试            
</ul>    
Visual Studio 2008初试            
</ContentTemplate>                        
Visual Studio 2008初试        
</asp:UpdatePanel>        
Visual Studio 2008初试
</div>
Visual Studio 2008初试
</form>
Visual Studio 2008初试
</body>
Visual Studio 2008初试
</html>

后端代码:
Visual Studio 2008初试using System;
Visual Studio 2008初试
using System.Data;
Visual Studio 2008初试
using System.Configuration;
Visual Studio 2008初试
using System.Collections;
Visual Studio 2008初试
using System.Linq;
Visual Studio 2008初试
using System.Web;
Visual Studio 2008初试
using System.Web.Security;
Visual Studio 2008初试
using System.Web.UI;
Visual Studio 2008初试
using System.Web.UI.WebControls;
Visual Studio 2008初试
using System.Web.UI.WebControls.WebParts;
Visual Studio 2008初试
using System.Web.UI.HtmlControls;
Visual Studio 2008初试
Visual Studio 2008初试
using System.Threading;
Visual Studio 2008初试
Visual Studio 2008初试
namespace Vs2008_Project
Visual Studio 2008初试Visual Studio 2008初试
Visual Studio 2008初试{
Visual Studio 2008初试    
public partial class _Default : System.Web.UI.Page
Visual Studio 2008初试Visual Studio 2008初试    
Visual Studio 2008初试{
Visual Studio 2008初试Visual Studio 2008初试        
/**//// <summary>
Visual Studio 2008初试        
/// 异步委托插入数据
Visual Studio 2008初试        
/// </summary>

Visual Studio 2008初试        public delegate int AsynInsertMillonData();
Visual Studio 2008初试
Visual Studio 2008初试        
protected void Page_Load(object sender, EventArgs e)
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{
Visual Studio 2008初试
Visual Studio 2008初试        }

Visual Studio 2008初试
Visual Studio 2008初试Visual Studio 2008初试        
/**//// <summary>
Visual Studio 2008初试        
/// 开始调用
Visual Studio 2008初试        
/// </summary>        

Visual Studio 2008初试        protected void btAdd_Click(object sender, EventArgs e)
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{
Visual Studio 2008初试            
// 异步回调方法
Visual Studio 2008初试
            AsyncCallback callback = new AsyncCallback(AsynDone);
Visual Studio 2008初试            
// 委托实例
Visual Studio 2008初试
            AsynInsertMillonData aimd = new AsynInsertMillonData(InsertMillion);
Visual Studio 2008初试            
// 开始调用
Visual Studio 2008初试
            IAsyncResult ar = aimd.BeginInvoke(callback, aimd);
Visual Studio 2008初试        }

Visual Studio 2008初试
Visual Studio 2008初试Visual Studio 2008初试        
/**//// <summary>
Visual Studio 2008初试        
/// 异步执行完成
Visual Studio 2008初试        
/// </summary>        

Visual Studio 2008初试        public void AsynDone(IAsyncResult ar)
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{
Visual Studio 2008初试            AsynInsertMillonData aimd 
= (AsynInsertMillonData)ar.AsyncState;
Visual Studio 2008初试            
int result = aimd.EndInvoke(ar);
Visual Studio 2008初试            ShowResult(result);
Visual Studio 2008初试        }

Visual Studio 2008初试
Visual Studio 2008初试Visual Studio 2008初试        
/**//// <summary>
Visual Studio 2008初试        
/// 插入百万条数据
Visual Studio 2008初试        
/// </summary>
Visual Studio 2008初试        
/// <returns>状态值OR插入时间</returns>

Visual Studio 2008初试        public int InsertMillion()
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{
Visual Studio 2008初试            
// CALL STORE PROCEDURE
Visual Studio 2008初试
            return CountryProc.AddCountryMillons(this.txtEName.Text, this.txtCName.Text);
Visual Studio 2008初试        }

Visual Studio 2008初试
Visual Studio 2008初试Visual Studio 2008初试        
/**//// <summary>
Visual Studio 2008初试        
/// 显示执行结果
Visual Studio 2008初试        
/// </summary>        

Visual Studio 2008初试        private void ShowResult(int res)
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{            
Visual Studio 2008初试            
if (res > 0)
Visual Studio 2008初试Visual Studio 2008初试            
Visual Studio 2008初试{
Visual Studio 2008初试                SetPannelText(
string.Format("添加成功!耗时{0}秒", res));
Visual Studio 2008初试            }

Visual Studio 2008初试            
else if (res == 0)
Visual Studio 2008初试Visual Studio 2008初试            
Visual Studio 2008初试{
Visual Studio 2008初试                SetPannelText(
"输入空值不执行!");
Visual Studio 2008初试            }

Visual Studio 2008初试            
else
Visual Studio 2008初试Visual Studio 2008初试            
Visual Studio 2008初试{
Visual Studio 2008初试                SetPannelText(
"添加失败!");
Visual Studio 2008初试            }

Visual Studio 2008初试        }

Visual Studio 2008初试
Visual Studio 2008初试Visual Studio 2008初试        
/**//// <summary>
Visual Studio 2008初试        
/// 更新PANNEL内的文本
Visual Studio 2008初试        
/// </summary>

Visual Studio 2008初试        private void SetPannelText(string text)
Visual Studio 2008初试Visual Studio 2008初试        
Visual Studio 2008初试{            
Visual Studio 2008初试            lblRes.Text 
= text;           
Visual Studio 2008初试        }

Visual Studio 2008初试    }

Visual Studio 2008初试}

  经过几次测试,平均值总在520-540秒之间, 不乐观~虽然不清楚这个SQL CLR是怎么一个运行原理,但
用代码或者O/R Mapping框架取代DB内置的存储过程在短期内是没什么指望了,虽然我很喜欢那么干

转载于:https://www.cnblogs.com/moye/archive/2007/09/25/905510.html