zoukankan      html  css  js  c++  java
  • Visual Studio 2008初试

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


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

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

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


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

      在DB中,存在表 TB_COUNTRY,结构如:
     

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

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;

    public partial class CountryProc
    {
        
    /// <summary>
        
    /// 连接串
        
    /// </summary>

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

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


            
    using (SqlConnection conn = new SqlConnection(CONN_MOYE2005_STRING))
            
    {
                
    try
                
    {
                    conn.Open();
                    
    // insert a record
                    SqlCommand cmd = new SqlCommand(
                        
    string.Format("INSERT INTO TB_COUNTRY(CountryEName,CountryName) VALUES('{0}','{1}')",
                            EName, CName),
                        conn);
                    
    // excute millons                
                    TimeSpan span = TimeSpan.Zero;
                    DateTime begin 
    = DateTime.Now;

                    
    for (int i = 0; i < 1000000; i++)
                    
    {
                        cmd.ExecuteNonQuery();
                    }

                    DateTime done 
    = DateTime.Now;
                    span 
    = done - begin;
                    
    return Convert.ToInt32(span.TotalSeconds);
                }

                
    catch (Exception err)
                
    {
                    
    return -1;
                }

                
    finally
                
    {
                    conn.Close();
                }

            }

        }

    }
    ;

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

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

    后端代码:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    using System.Threading;

    namespace Vs2008_Project
    {
        
    public partial class _Default : System.Web.UI.Page
        
    {
            
    /// <summary>
            
    /// 异步委托插入数据
            
    /// </summary>

            public delegate int AsynInsertMillonData();

            
    protected void Page_Load(object sender, EventArgs e)
            
    {

            }


            
    /// <summary>
            
    /// 开始调用
            
    /// </summary>        

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


            
    /// <summary>
            
    /// 异步执行完成
            
    /// </summary>        

            public void AsynDone(IAsyncResult ar)
            
    {
                AsynInsertMillonData aimd 
    = (AsynInsertMillonData)ar.AsyncState;
                
    int result = aimd.EndInvoke(ar);
                ShowResult(result);
            }


            
    /// <summary>
            
    /// 插入百万条数据
            
    /// </summary>
            
    /// <returns>状态值OR插入时间</returns>

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


            
    /// <summary>
            
    /// 显示执行结果
            
    /// </summary>        

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

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

                
    else
                
    {
                    SetPannelText(
    "添加失败!");
                }

            }


            
    /// <summary>
            
    /// 更新PANNEL内的文本
            
    /// </summary>

            private void SetPannelText(string text)
            
    {            
                lblRes.Text 
    = text;           
            }

        }

    }

      经过几次测试,平均值总在520-540秒之间, 不乐观~虽然不清楚这个SQL CLR是怎么一个运行原理,但
    用代码或者O/R Mapping框架取代DB内置的存储过程在短期内是没什么指望了,虽然我很喜欢那么干
  • 相关阅读:
    在MPTCP中引入流量监控——bwm-ng的使用说明
    Ubuntu下配置MPTCP
    实现两台MPTCP主机之间的通信——VSFTPD的配置与使用
    Google 辟谣,Android 和 Chrome OS 不合并
    paper-7
    计算机网络方面国际三大顶尖会议
    谷歌物联网操作系统Android Things揭开面纱
    张纯如
    Android binder机制之 5 --(创建binder服务)
    【BZOJ 1491】[NOI2007]社交网络
  • 原文地址:https://www.cnblogs.com/moye/p/905510.html
Copyright © 2011-2022 走看看