转发:回复:答复: Visual Studio 2005和Visual Studio 2008有什么区别?
2011-06-20 10:09 yuejianjun 阅读(534) 评论(0) 编辑 收藏 举报转发:回复:答复: Visual Studio 2005和Visual Studio 2008有什么区别? | ![]() |
发件人:我自己的邮箱 <409494312@qq.com> 查看 |
时 间:2011年5月1日(星期天) 晚上9:34 | |
收件人: | |
很多人了解Session和Cookie的区别,其实Session和Cookie是有非常密切联系的。可以这么说,浏览器禁用了Cookie,服务器端的Session也将失效。
Http协议本身是无状态的,Session机制在一定程度上解决了Web应用状态问题。服务器判断Session唯一性是通过每个Session独有的Session ID,通过在每次http传输的消息中附带Session ID解决了维持会话状态的问题。
一个应用程序域是一组程序集的一个逻辑容器。它有利于减小内存使用,提高系统性能。
using的几种用法(http://www.cnblogs.com/windsails/archive/2004/09/12/42444.html
)
1.引用命名空间
2.重命名类名
3.起相当于try...catch...finally的作用,只能用于实现类IDisposable接口的类
new的作用(http://www.cnblogs.com/SeraphWU/archive/2010/03/11/1683837.html)
1。最常见的,用于实例化
2。也用于为值类型调用默认的构造函数
3。new 关键字可以显式隐藏从基类继承的成员
简单工厂模式
简单工厂的意图是:根据提供给他的数据,返回几个可能类中的一个类的实例
DataReader与DataSet有什么区别?
dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表
DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接
datareader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。
记录虚函数(Virtual),抽象函数(abstract)和接口的区别 C#虚函数virtual详解
1.virtual:允许被重写(override),但不强制要求。声明时提供其自身实现;
2.abstract:强制要求其继承者重写。声明时不提供其自身的实现,抽象类不能被实例化;
3.interface:接口就是协议,其声明的成员(属性,方法,事件和索引器)必须由其继承的类实现。接口不能直接被实例化。
虚方法与抽象方法的区别在于,虚方法提供自身的实现,并不强制要求子类重写;而抽象方法不提供自身的实现,并且强制子类重写。
抽象类与接口很相似,但是思路不一样。接口是公开类的成员,而抽象类则是抽象类成员以要求子类继承并实现。
通用语言运行平台(Common Language Runtime,CLR),是对CLI这个架构在Windows平台的实现。简单地理解就是CLR这个厨师,让CLI这本菜谱发挥了其真正的作用。
食物:类库(Framework Class Library,FCL),所有在.NET能够使用的类库。分为两部分,一部分为原料,另一部分为成品菜。
公共语言规范Common Language Specification (CLS) 和公共类型系统Common Type System (CTS) ,是CLI的一部分内容,它们的目的是保证各种语言与.NET Framework的兼容性的。就好像有的食客习惯用筷子,有的则喜欢用叉子,像八戒就用九齿钉耙。有了CLS和CTS,各路食客就能使用自己喜欢用的餐具吃上可口的食物了。例如:把C#中的int和VB中的Integer统一映射到System.Int32。
正则表达式
public bool IsRegex()
{///判断是否为数字
bool isBool = false;
Regex rx = new Regex(@"^[1-9]\d*$", RegexOptions.Compiled);
int IntR = 121;
if(rx.IsMatch (IntR .ToString ()))
{
isBool = true;
}
return isBool;
}
//检查密码
function CheckPassword(str)
{
var chkNum = new RegExp("^[A-Za-z0-9\._!@#\$%\^&\*]{6,20}$");
if (str.match(chkNum) == null)
{
return false;
}
return true;
}
Json操作
public string strJson;
protected void Page_Load(object sender, EventArgs e)
{
ProductData pd=new ProductData ();
List<Product> listProduct = pd.GetProducts();
strJson = JsonConvert.SerializeObject(listProduct);
}
var result='<%=strJson %>';
result="("+result+")";
var product=eval(result);
alert ( product[0].ProductId);
alert ( product.length);
for (var i = 0; i < product.length; i++) {
$('#productList > tbody:last').append('<tr onclick="ShowDetail(' + product[i].ProductId + ')"><td>' +
product[i].ProductName + '</td><td>' +
product[i].Price + '</td><td>' +
product[i].Stock + '</td></tr>');
}
}
负载均衡
通常面对高并发与大数据量都会使用负载均衡,使用多台服务器来共同承担压力。
接着许许多多的问题就来了。
Http Request => (Server1, Server2, Server3)
1. 服务器数据同步
1.1 数据库同步
通常只会用一个数据库服务器,所以数据库同步,不用额外处理。
1.2 文件同步
比如管理员登录后台,添加了一张图片,管理员的请求被均衡到Server1,那么这张图片会被保存在Server1,那么我们需要同步到Server2,Server3。
可以使用软件监测某些目录来达到同步的目的,比如更新部署也是一样,每台服务器分别更新是相当麻烦,而且还要测试每台服务器是否一致,所以我们需要
可以同步的工具。
1.3 Session
无法使用会话,因为会话会容易丢失,比如你的请求在Server1上,保存到Session中,你的下一个请求可能在Server2,就丢失了。
不过Session有一些选项可以指定是否持久化,可以保存到数据库中等等。
1.4 验证票
配置machine key之类的,保证多台服务器生成的验证票之类的是一致的。
1.5 静态变量要小心
现在是每台服务器都有一份。
1.6 缓存
一定要保证多台服务器间缓存数据的一致性和同步性,使用Memcache
2. 压力测试
ASP.NET 2.0服务器控件开发----控件生命周期
服务器控件生命周期简介
服务器控件的生命周期是创建服务器控件最重要的概念。作为开发人员,必须对服务器控件生命周期深刻理解。当然,这不是一朝一夕就可以做到的。对于学习控件开发技术的初学者,可以不必掌握得非常详细深入,只需对服务器控件的生命周期中的不同阶段有一个大致的了解即可。
在掌握服务器控件生命周期的过程中,读者要特别注意有关服务器控件状态的相关内容。在重点了解生命周期各个阶段的同时,对服务器控件的状态变化要注意以下问题:控件的生命周期何时保存控件和恢复其状态;何时与页面及其他控件之间进行交互;何时执行重要的处理逻辑;在各个阶段,控件可使用哪些信息、保持哪些数据、控件呈现时处于哪种状态以及何时输出显示标记文本等。如下列举了服务器控件生命周期所要经历的11个阶段。
(1)初始化-- --在此阶段中,主要完成两项工作:一、初始化在传入Web请求生命周期内所需的设置;二、跟踪视图状态。首先,页面框架通过默认方式引发Init事件,并调用OnInit()方法,控件开发人员可以重写该方法为控件提供初始化逻辑。此后,页面框架将调用TrackViewState方法来跟踪视图状态。需要注意的是:多数情况下,Control基类提供的TrackViewState方法实现已经足够了。只有在控件定义了复杂属性时,开发人员才可能需要重写TrackViewState方法。
(2)加载视图状态----此阶段的主要任务是检查服务器控件是否存在以及是否需要将其状态恢复到它在处理之前的请求结束的状态。因此该过程发生在页面回传过程中,而不是初始化请求过程。在此阶段,页面框架将自动恢复ViewState字典。如果服务器控件不维持其状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员则不必实现任何逻辑。针对那些无法在 ViewState字典中存储的数据类型或者需要自定义状态管理的情况,开发人员可以通过重写LoadViewState方法来自定义状态的恢复和管理。
(3)处理回发数据----若要使控件能够检查客户端发回的窗体数据,那么必须实现System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。因此只有处理回发数据的控件参与此阶段。
(4)加载----至此阶段开始,控件树中的服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。此时,开发人员可以通过重写OnLoad()方法来实现每个请求共同的逻辑。
(5)发送回发更改通知----在此阶段,服务器控件通过引发事件作为一种信号,表明由于回发而发生的控件状态变化(因此该阶段仅用于回发过程)。为了建立这种信号,开发人员必须再次使用System.Web.UI.IPostBackDataHandler接口,并实现另一方法- RaisePostBackChangedEvent()。其判断过程为:如果控件状态因回发而更改,则LoadPostData()返回true;否则返回false。页面框架跟踪所有返回true的控件并在这些控件上调用RaisePostDataChangedEvent()。
(6)处理回发事件----该阶段处理引起回发的客户端事件。为了便于将客户端事件映射到服务器端事件上进行处理,开发人员在此阶段可以通过实现 System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent()方法来实现该逻辑。由此途径,服务器控件将成功捕获回发的客户端事件进行服务器端的相应处理。
(7)预呈现----该阶段完成在生成控件之前所需要的任何工作。通常情况下是通过重写OnPreRender()方法完成该工作。需要注意的是:在该阶段,可以保存在预呈现阶段对控件状态所做的更改,而在呈现阶段进行的更改则会丢失。
(8)保存状态----如果服务器控件不维持状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员不必在该阶段实现任何逻辑。因为这个保存状态的过程是自动的。如果服务器控件需要自定义状态保存,或者控件无法在ViewState字典中存储特殊的数据类型,则需要通过重写SaveViewState()方法来实现状态保存。
(9)呈现----表示向HTTP输出流中写入标记文本的过程。开发人员通过重写Render()方法使其在输出流上自定义标记文本。
(10)处置----在此阶段中,通过重写Dispose ()方法完成释放对昂贵资源的引用,如数据库链接等。
(11)卸载----完成的工作与"处置"阶段相同,但是,开发人员通常在Dispose()方法中执行清除,而不处理Unload事件。
ASP.NET 页生命周期概述(http://msdn.microsoft.com/zh-cn/library/ms178472(VS.80).aspx)生命周期事件
1.开始(PreInit):使用该事件来执行下列操作:检查 IsPostBack 属性来确定是不是第一次处理该页。创建或重新创建动态控件。动态设置主控页。动态设置Theme 属性(主题的名称)。读取或设置配置文件属性值。
2. 页初始化 :页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。
3. Init:在所有控件都已初始化且已应用所有外观设置后引发。使用该事件来读取或初始化控件属性。
4. InitComplete:由 Page 对象引发。使用该事件来处理要求先完成所有初始化工作的任务。
5. PreLoad:如果需要在 Load 事件之前对页或控件执行处理,请使用该事件。在 Page 引发该事件后,它会为自身和所有控件加载视图状态,然后会处理Request 实例包括的任何回发数据。
6. Load:Page 在 Page 上调用 OnLoad 事件方法,然后以递归方式对每个子控件执行相同操作,如此循环往复,直到加载完本页和所有控件为止。使用OnLoad 事件方法来设置控件中的属性并建立数据库连接。
7. 控件事件:使用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查 Page 和各个验证控件的 IsValid 属性。
8. LoadComplete:对需要加载页上的所有其他控件的任务使用该事件。
元数据
元数据描述了一个类型的字段和方法,元数据使用一种语言开发的类型可以被另外一种完成不同的语言使用。垃圾收集器也是使用元数据来确定哪些对象是可达的—元数据指出了一个对象中引用了哪些对象。Vs编辑器也是利用元数据来提供智能感知特性和其它一些帮助有关的功能。
值类型,引用类型,(堆)栈,堆
垃圾收集器只收集分配在托管堆上的引用类型实例所占的资源,
除了托管堆上的资源,系统运行时还有一些资源,即值类型实例所占的资源,他们运行在线程的(堆)栈上,垃圾收集器不负责这些内存的回收,当值类型实例变量所在的方法执行结束时,它们所占的空间随着堆栈空间的消亡而自动消失
select top 10 * from cs where id not in (select top 30 id from cs )
select top 10 * from cs where id >(select max(id) from (select top 30 * from cs order by id asc )as A)
select * from ( select *, row_number() over(order by id ) as rid from cs) as a where rid between 30 and 40 ///2005使用row_number()分页
删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
http://www.cnblogs.com/ziling8163/archive/2008/11/10/1330519.html
2.菜单风格像office2007。
7.C#,VB.net语法形式上也有很大改进。
9.Web增强了对集成ajax支持。内含LINQ
5.加入两个新的资料控制项:ListView和DataPager
6.提供 WCF,WF,WPF 支持。
Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。终结点可以是从服务终结点请求数据的服务客户端。简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数据流
WCF就是微软对于分布式处理的 编程技术的集大成者,它将DCOM、Remoting、Web Service、WSE、MSMQ集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准。
“WPF/E”是一种新 Web 呈现技术的代号,创建该技术的目的是使其能够在各种平台上运行。该技术支持创建丰富的、具有绚丽视觉效果的交互式体验,并且可以随处实现: 无论是在浏览器内、在多个设备上还是在桌面操作系统(如 Apple Macintosh)中。Microsoft .NET Framework 3.0(Windows 编程基础结构)中的呈现技术 XAML(可扩展应用程序标记语言)遵循 WPF (Windows Presentation Foundation),它是“WPF/E”呈现功能的基础。
Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案。作为 Microsoft WinFX 的组成部分,Windows Workflow Foundation 同时提供了 API 和一些工具,用于开发和执行基于工作流的应用程序。Windows Workflow Foundation 提供单个统一的模型,以便创建跨越多个类别应用程序的端到端解决方案,包括人力工作流和系统工作流。(自己搞过)
再次我们对WebService 以及Remoting做一个比较
WebService的特点是:平台独立性(Platform-independent)、跨语言(只要能支持XML的语言都可以) 以及穿透企业防火墙;
net webservice是基于http的是无状态的;
但是它的缺点也很明显,就是需要部署一台Web Server;而且速度比较慢;
.net Remoting的特点是
他的优点是用户既可以使用TCP信道方式进行二进制流方式通信,也可以使用HTTP信道进行SOAP格式的性通信
效率相对WebService要高不少;
remoting可以用于有状态的情况;
但是它的缺点也很明显,.net remoting只能应用于MS 的.net framework之下。
使用场合
如果互动双方都是支持 .NET技术的环境,并且在操作系统上能提供一致的验证机制,而且很重视沟通双方作业的效率,就是 .NET Remoting上场的时机。相反的,如果沟通双方是异质环境,又或沟通的模式就是无状态的情况,持续进行的互动作业前后是没有关联的,Web Service就是理想选择了。
.Net中使用事务处理
(在SqlServer中,每条Sql语句都作为一个事务来执行,所以无论在存储过程(存储过程里的一条SQL语句),还是在.net代码中使用,执行单条Sql语句没有必要使用事务处理)
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();
SqlTransaction myTrans = myConnection.BeginTransaction(); //使用New新生成一个事务(开始事务)
SqlCommand myCommand = new SqlCommand();
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "Update Address set location='23 rain street' where userid='0001'";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "Update table2 set dd='23 rain street' where userid='0001'";
myCommand.ExecuteNonQuery();
myTrans.Commit(); //( 提交事务)
Console.WriteLine("Record is udated.");
}
catch(Exception e)
{
myTrans.Rollback(); //(事务回滚)
Console.WriteLine(e.ToString());
Console.WriteLine("Sorry, Record can not be updated.");
}
finally
{
myConnection.Close();
}
存储过程中使用事务
ALTER PROCEDURE [dbo].[SP_Transaction]
AS
/* SET NOCOUNT ON */
declare @result int;
select @result=0;
begin transaction /*创建事务*/
update cs set coid='555' where id=1
select @result =@@ERROR
update cs set contents='555' where id=1
select @result = @result+@@ERROR
if(@result <>0)
begin
rollback transaction /*回滚事务*/
return 0
end
else
begin
commit transaction /*提交事务*/
return 1
end
触发器:
--创建一个Delete触发器
create trigger trdstudent
on cs---当对表cs执行删除时,引发操作。(该处是同时删除表dajiemoney中dajiemoney.id=cs.id的行)
for delete
as
delete dajiemoney
from dajiemoney br,deleted d----deleted在该处表示cs表
where br.id=d.id
--创建一个update 触发器 当更新cs表时,同时更新dajiemoney表的comapnyname字段
create trigger trucsOKs
on cs --在cs表中创建触发器
for update --为什么事件触发
as
if update(coid)
begin
update dajiemoney
set comapnyname=i.coid
from dajiemoney,inserted i
where dajiemoney.id= i.id
end