| 小刘's profile穿梭者PhotosBlogLists | Help |
穿梭者
|
January 17 为什么E科士威所到之处,都会引起购物热潮???首先是他的经营理念:科士威一向以互惠营销,消消费致富,他不单是为自己卖产品,同时也为厂家卖产品,做到以量抵价,产品不单价格而且物美,有沃尔码的背景。 再次就是他的四大赢利通路: 一,实体店铺折扣店开心购物 马来西亚地区有400多间销售超过2000种商品的折扣店外,菲律宾近100间,泰国有100多间,新加坡,印尼都设有实体折扣店。2005年在台湾开业八个月,也开了62家折扣店。香港店铺于2006年9月开业,地址在九龙尖沙咀,广东道188号,港景汇地下,在eCosway购物广场,有来自世界各地种类繁多、物美价廉、高品质的生活用品,包括健康保健、美容护肤、纤体瘦身、秀发美发、个人护理、风味美食、家居厨房用品等等,还有最先进技术制造的活水滤水系统 二,电子商务网上购物送到家 为了把科士威的折扣商店开到全世界,科士威在全球扩张的战略中,电子商务平台是她的先头部队-“空降兵”,公司在2001年成立了eCosway,把几千种适合全球运送的商品放到网上,让全世界的人都可以买到科士威又好又便宜的商品,体会跨国购物,让全世界有心创业的朋友可以通过互联网来加盟eCosway,代理eCosway的上千种商品。让全球消费者可以购买及销售其大量折扣商品, eCosway让您足不出户就可以香港免税价格购买到这些产品 三,让你赚钱及消费的信用卡 e科士威破天荒的让银行帮消费者和业主省钱、赚钱!银行“金融网”协助eCosway(e科士威)维系了消费者和业主的更多利益。e科士威业主可以申办联名白金信用卡,在全球刷卡可获销售业绩eV及卡超值积分CVP,把所有的消费变成利益回馈!1、任何e科士威的消费者和业主在 任何场合使用联名信用卡都将获得消费积分,凭积分可获得实体连锁商店的众多折扣产品。2、您的组织网络里的消费者和业主在任何场合 使用联名信用卡都将获得业绩归入您的计酬 四,连通商家生活通路无人敌 eCosway(e科士威)利用消费者网络资源,并与社会上其他众多商家达成战略合作结成“联惠商家”。任何一家公司都只能提供有限的几种产品 或某几种服务,然而我们的消费者的消费会涉及到众多场所如旅店、服装店、花店、桑拿、美容、饭店、书店......等等,只要通过“联惠商家”计划同样可以让E科士威的消费者或业主在这些场所的消费额重新变成自己的营业额! 举个例子吧: ecosway对厂家说,你的产品能给我比代理商更低的价格吗? January 15 怎么在科士威里赚到钱,科士威又给了我们什么优点????如果你弄不清楚E科士威的四大营销通路,就不会明白EV来源与哪里,并且一直会问卖多少货才得到500EV? eCosway(E科士威)的四大盈利通路-联名信用卡
1、这张信用卡免年费; SKype: wylzm@126.com January 10 科士威之旅认识科士威只有几天,但是从一些资料、以及网站的介绍已经对科士威的营销模式有了一定的认识,也就是互惠营销,这种能够让购物者、业主、商家等各方共赢的方式确实是直销领域的另一次革命。具体的盈利模式以及一些概念不是一句话能说清的。但是我坚信等科士威进入大陆的时候,我们会从中学到很多,并且会受益很多。 今天刚刚注册成为了业主,希望能够从科士威这种模式中得到实惠,所以今天一下订购了300块钱的产品,想自己亲身体验一下他的产品,如果以这么低的价格能够买到好质量的产品,那么我一定会推荐给周围的朋友使用。过两天申请一张白金卡,因为离香港比较近,所以可以使用白金卡到那边去消费。 等产品来了,我会把使用产品的感受记录在这里,也算是我的科士威之旅的日志吧! 如果大家想了解更多科士威,可以到下列网站去看一下: http://www.ecos.cc 购物网站 可以跟我联系:QQ 565006315 SKype wylzm@126.com March 01 论文计划1)准备粗糙集预处理方面的知识,包括约简,缺失值的处理,数据离散化(可结合云理论) 2)针对空间数据的特点,研究粗糙集理论在对空间数据预处理方面的可行性及优缺点, 3)研究适合空间数据的算法,(这需要对空间数据有较深的理解) 4)通过试验来验证算法的可行性及优越性,进而改进。 December 14 IT1)feedburner推出feedflare服务,将各种服务(del.icio.us,tag,email author,technorati)与feed整合。 2)Amazon开放它的搜索,我们可以用它的网络爬虫来建立自己的搜索。 December 12 ASP.NET WEB表单控件1)为什么要用ASP.NET WEB表单控件 1 使生产商和开发人员能够更容易的创建自动生成UI的工具或应用程序。 2 简化创建交互式Web表单的过程,用户不必对HTML控件的工作原理有太多的了解,同时也较少了使用HTML控件出现错误的可能性。 2)基类WebControl web表单控件的基类是webcontrol。 3)ASP.NET Web表单控件使用中需要的问题 HTML服务器控件使用起来比较简单,所有的属性都是简单的String值。 ASP.NET Web表单控件使用起来不是很直接,许多ASP Web表单控件的属性值来自于一个枚举或是一个对某个对象的引用。 1 在枚举中设置属性值 例如:ASP.NET Image服务器控件的ImageAligh属性应设置为枚举类型ImageAligh的一个成员。 可以显式的定义这个属性,ImageAligh="Right";(控件通过属性名就可以知道使用哪个枚举) 在可执行代码中为这个属性赋值,必须使用如下语句: objMyImage.ImageAligh=ImageAligh.Right(控件现在为对象) 如果动态创建枚举值,例如这些属性值来自一个列表,我们必须使用适当枚举成员中的数字值。(疑问,设成ImageAligh.Right不行吗?可以,见MSDN)(这里的意思应是我们从列表可以得到text和value,text是一个string,不能直接赋值给imagealigh,而value可以直接赋给imagealigh) 2 寻找枚举值 为了找到用于枚举的值,可以有几种选择: 利用类型转换器 TypeDescriptor.GetConverter (GetType(enumeration)).ConverFromString("member") 注:首先得到枚举的类型转换器,然后将string转换为所需要的值。 对于没有提供类型转换器的枚举来说,可以直接将这个枚举成员转换为一个Integer变量:CType(HorizontalAlign.Left,Integer) 另一种技术就是利用wincv应用程序(一个查看class信息的程序) 注:个人认为最好在设计的时候就查出值与字符串的对应,这样后面用的时候就方便了。 3 属性是对象的引用 有些控件的属性是其他对象的引用。 例如,ASP Web表单控件中有几个属性(BackColor,ForeColor,BorderColor)是对一个Color对象的引用, 当在源码中为控件显式定义控件颜色的时候,可以直接使用颜色的名称,(同样道理,控件通过属性名就知道是哪个类) 如果想在运行时设置颜色的话,必须首先创建一个color对象,然后再将这个对象赋以适当的属性。 System.Drawing.Color类 FromArgb FromKnownColor FromName 是三种构造color对象的方法。 还有一些color静态属性,可以用来获取一些已知颜色的color对象。 System.Web.UI.WebControls.Unit类 ASP Web表单控件中的几个属性是对一个Unit对象的引用, Unit类的两个属性,Type Value 三种共享方法 Percentage Pixel Point , 如果想要知道单位的类型,可以对unit对象的type属性进行查询,但是得到的是枚举unittype的整数值。我们可以通过类型转换得到文本的名字。 4 利用AutoPostBack功能 一些web表单服务器控件和所有的列表控件都提供了一个名为AutoPostBack的属性,如果设为true,那么当用户选择了一个值后,此控件会自动将它的值和同一个表单中其它的控件的值返回服务器中, 这个属性还在服务器上引起一个事件。 工作方式 当AutoPostBack属性的值为True时,服务器控件向这个控件添加一个客户端事件,或为onclick,或为onchange。 <input id="MyControl" type="checkbox" name="MyControl" onclick="javascript:_doPostBack('MyControl',")"/> 同时,这个控件所在的<form>表单上添加两个Hidden类型的<input>控件。客户端函数_doPostBack将表单提交给服务器。 4)ASP Web表单控件 1 ASP:CheckBox ASP:RadioButton text属性自动为控件创建一个标签;可对所有web表单控件添加样式,groupname属性为RadioButton控件添加组属性。 2 ASP:HyperLink控件 NavigaterUrl Target Text ImageUrl 没有name属性(但是可以添加一个name属性,不理解) 锚的概念 attributes属性的用法,一般是为了设置或获取非标准属性的值。 3 ASP:LinkButton控件 是<a>的一种扩展,默认情况它将AutoPostBack设为true,将客户端的_dopostback作为href属性的值(也就是它是通过这个客户端程序来提交表单的),提交后激发服务器端click事件。text属性指定文本,不能指定图像。 4 ASP:Image 5 ASP:Panel 6 ASP:Lable 7 ASP:Button 8 ASP:ImageButton 创建一个<input type="image">元素 9 ASP:TextBox控件 通过TextMode属性设置可以得到不同的HTML元素,可取TextBoxMode.MultiLine TextBoxMode.Password 注:文本框被放到HTML表单后,即使把EnableViewState=false,该文本框还会保持原来的状态,因为文本框总是将它们的值返回给服务器并生成一个更新事件。 10 ASP:Table控件 创建过程与HTML服务器控件相似,有一点注意,在插入值到表的单元格时,要通过LiteralControl对象生成表的内容,因为TableCell对象没有InnerHtml属性。 LiteralControl实际上被编译为一个write指令。 11 ASP:Literal ASP:PlaceHolder 我们要动态生成控件时,就要用到ASP:PlaceHolder控件。 5)什么是非标准属性,标准属性(服务器控件属性与HTML属性的关系) 6)命令控件 三个按钮类型的控件Button,ImageButton,LinkButton提供了一个命令功能。关于onclick与oncommand的区别。 都是由click动作引起的,但是oncommand可以传递CommandName属性和commandargument属性,如果有很多按钮存在,我们可以通过commandname属性来区分是哪个按钮被按了。(有一点疑问,所有的按钮的oncommand触发的是同一个处理程序码?还是只是设一个处理程序方便?) 男人 1. 男人是社会的主体,不管你信或不信。所以男人应该有种责任感。 2. 25岁之前,请记得,爱情通常是假的,或者不是你所想象的那样纯洁和永远。如果你过了25岁,那么你应该懂得这个道理。 3. 吃饭7成饱最舒服。对待女友最多也请你保持在7成。 4. 30岁之前请爱惜自己的身体,前30年你找病,后30年病找你。如果你过了30岁,你自然也会懂得这个道理。 5. 事业远比爱情重要。如果说事业都不能永恒,那么爱情只能算是昙花一现。 6. 不要轻易接受追求你的女孩。女追男隔层纱。如果你很容易就陷进去,你会发现你会错过很多东西,失去很多东西。 7. 请你相信,能用钱解决的问题,都不是问题。如果你认为钱索王道,有钱有女人,没钱没女人,那么。女人不是问题。 8 . 请永远积极向上。每个男人都有他可爱的地方,但是不可爱的地方只有不积极面对生活。 9. 不要连续2次让同一个女人伤害。好马不吃回头草,是有他道理的。如果认真考虑过该分手,那么请不要做任何舍不得的行动。 10. 如果你和你前女友能做朋友,那么你要问自己:为什么?如果分手后还是朋友,那么只有2个可能:。你们当初都只是玩玩而已,没付出彼此最真的感情。或者:必定有个人是在默默的付出无怨无悔! 11. 永远不要太相信女人在恋爱时的甜言蜜语。都说女人爱听甜言蜜语,其实,男人更喜欢。 12. 请不要为自己的相貌或者身高过分担心和自卑。人是动物,但是区别于动物。先天条件并不是阻挡你好好生活的借口。人的心灵远胜于相貌,请相信这点。如果有人以相貌取人,那么你也没必要太在意。因为他从某种意义来讲,她只是只动物。你会跟动物怄气吗? 13. 失恋时,只有2种可能,要么你爱她她不爱你,或者相反。那么,当你爱的人不再爱你,或者从来没爱过你时。你没有遗憾,因为你失去的只是一个不爱你的人。 14. 请不要欺骗善良的女孩。这个世界上,善良的女孩太少。 15. 不能偏激的认为金钱万能,至少,金钱治不好艾滋病。 16. 请一定要有自信。你就是一道风景,没必要在别人风景里面仰视。 17. 受到再大的打击,只要生命还在,请相信每天的太阳都是新的。 18. 爱情永远不可能是天平。你想在爱情里幸福就要舍得伤心。 19. 如果你喜欢一个认为别人应该对她好的mm,请尽早放弃。没有人是应该对一个人好的。如果她不明白这个道理,也就是她根本不懂得珍惜。 20. 不要因为寂寞而找gf,寂寞男人请要学会品味寂寞。请记住:即使寂寞,远方黑暗的夜空下,一定有人和你一样,寂寞的人不同,仰望的星空却是唯一。 21. 任何事没有永远。也别问怎样才能永远。生活有很多无奈。请尽量充实自己,充实生活。请善待生活。 end。男人有很多无奈,生活很累但是因为生活才有意义。当你以为你一无所有时,你至少还有时间,时间能抚平一切创伤。所以请不要流泪。。。。。 ASP.NET输入验证控件1)ASP.NET验证控件实现原理 过去,Web开发人员添加表单验证的逻辑时面临着艰难的选择,在客户端验证比较方便,但并不是所有的浏览器都支持这种验证,并不是所有浏览器都支持javascript,而且不同版本的浏览器支持不同版本的javascript。 幸运的是,现在不需要你做出这种艰难的选择了。验证控件会自动产生客户端和服务器端代码。如果浏览器支持javascript,那么客户端验证脚本就自动发送到浏览器,如果不支持,验证程序就自动在服务器端代码中实现。 2)配置客户端验证 验证控件所使用的Javascript脚本库是在安装.NET框架时安装的。位于WebUIValidation.js文件中。 默认情况下,WebUIValidation.js被安装到名为aspnet_client目录下,位于Web服务器的wwwroot目录下。所以如果改变了服务器根目录的位置,需要把aspnet_client拷贝到根目录下。 WebUIValidation.js文件的准确位置由machine.config文件(webControls clientscriptsLocation)来决定。 ASP.NET框架封装了一个名为aspnet_regiis的命令行工具,可以用来安装和卸载该脚本库。aspnet_regiis -c aspnet_regiis -e. 3)验证控件 <ASP:Required FieldValidator> <ASP:RangeValidator> <ASP:CompareValidate> <ASP:RegularExpressionValidator> <ASP:CustomValidator> <ASP:ValidationSummary> System.Web.UI.WebControls.BaseValidator命名空间中的BaseValidator是他们的基类。基类提供了一些常用的属性与方法。 每个验证控件都有自己特有的属性和方法。 1)display属性 可取dymatic,static,none值。dymatic为错误信息动态分配空间,而static为错误信息预留空间。 2)CustomValidator控件 可设置客户端验证和服务器端验证。通过设置函数返回的IsValid来确定是否成功进行了自定义验证。 3)IsValid属性 每个验证控件和page对象都有一个IsValid属性,表明验证是否成功。 4)取消验证 1 怎样取消对一个页面的验证 所有按钮类型的控件都有一个CauseValidation属性,用来设置提交的表单是否需要验证。(设为false,则表单中所有验证失效,只是提交表单) 在用cancer时特别有用。 2 每个验证控件都有一个EnableClientScript属性,通过这个属性可以设置在客户支持客户端的验证时是否允许进行客户端的验证。 3 通过设置Enabled属性,可设置是否进行验证。 4 无论基于什么原因,只要想禁用客户端表单验证,就可以添加如下指令到页面的顶部来实现: <%@Page ClientTarge="downlevel"%> 但不幸的是,这样也禁止了将页面内所有的ASP.NET控件翻译成任何与HTML3.2不兼容的内容。 December 11 服务器控件1)
System.Object HTML服务器控件是在System.Web.UI.HtmlControls中定义的。其中定义了两个基类,控件继承自这两个基类,另外每个交互控件还有特定的类。
HtmlControl基类: 所有HTML控件的基类是System.Web.UI.HtmlControls.HtmlControl类。它提供了一些所有HTML控件公用的方法、属性和事件。
第二个基类是System.Web.HtmlControls.HtmlContainerControl类,它是那些必须有闭标记的所有HTML元素(例如<select>)的基。 由于它只用于那些本身就有内容的“容器“元素,因此它还添加了两个非常有用的属性。 InnerHtml InnerText
HTMLGenericControl类 .NET架构并没有为所有的元素提供一个类,只是为其中的一部分HTML元素提供了一些特定的类。这些元素只要是那些应用于HTML<form>上的元素,或是用于创建页面的交互部分的元素。 如果没有为所使用的元素定义特殊的类的话,该架构将会把System.Web.UI.HtmlControls.HtmlGenericControl类作为替补。 System.Object
专有HTML控件类 对每一个控件都有与之相对应的专有属性和事件。 2)HTML服务器控件的用法 1 使用Style属性设置控件的外观 这种技术对于HTML控件最有用。因为Asp.NET WEB表单控件以及其他大部分服务器控件都有特定的属性来改变外观。 2 页面返回时视图状态的管理 一个包含服务器端<form>控件的ASP.NET页面会自动产生VIEWSTATE。这是页面中所有控件的值的编码表示形式,并且利用一个HIDDEN类型的<input>控件在页面的加载时保持不变。
3)Html服务器控件详述 1 HtmlGeneric控件 与其它控件不同的是:它的TagName属性是读/写。 2 HtmlAnchor控件 经常用于HTML超级链接或HTML锚的5个属性可以当作属性来使用。 3 HtmlImage控件 在创建ASP.NET交互式页面的时候通常使用该控件。如果要使用HtmlInputFile控件或是常规<input type="file">元素的话,必须对enctype属性进行设置(编码方式)。 4 HtmlButton控件 这不是通常使用的元素(Navigator或Opera中不支持),但是在IE中非常有用。HtmlButton是一个容器控件,我们可以加入HTML. 为了改变一个HtmlButton控件的内容,必须对InnerHtml属性进行设置或是设计时在元素中对内容进行定义。 5 HtmlInputButton控件 在交互式表单中我们通常使用的按钮类型是<input type="submit">、<input type="button">、<input type="reset">元素。可以设置的专有属性是name value(标题) 6 HtmlInputText控件 最普通的HTML表单控件可能就是文本框了。 7 HtmlInputCheckBox控件和HtmlInputRadioButton控件 为了在窗体上创建一组互斥的选项按钮,必须给每个单按钮的name属性设置相同的值。 8 HtmlInputImage控件 显示一个“可单击“的图像的最简单方法就是利用<input type="image">元素,当按钮被单击的时候,包含这个元素的表单连同鼠标指针在图像种的坐标被一起提交给服务器。
9 HtmlInputFile控件 如果允许用户能够将文件上传到你的服务器上的话,可以 10 HtmlInputHidden控件 在推出ASP.NET之前,我们利用hidden类型的input控件在页面之间保持值的一致性。实际上,这正是ASP.NET在维持页面的VIEWSTATE时 所做的幕后工作。我们可以利用这些控件来存储客户端页面上的值,并且以页面不可见的形式将这些值返回到服务器中。 我们可以通过设置Visible属性的值来设置控件产生的HTML输出是否会包含在服务器返回给客户的HTML中。 11 HtmlSelect控件 可以把一个hashtable对象用作datasource,也可利用listenitem对象创建列表内容。 12 HtmlTable控件、HtmlTableRow控件和HtmlTableCell控件 按顺序创建每个单元格并将它添加到一行中,然后再将行添加到表中。 5)Html服务器控件事件 1 ServerClick事件 SercverClick事件是为HtmlAnchor控件、HtmlButton控件、HtmlInputButton控件和HtmlInputImage控件产生的。 2 ServerChange事件 不能自动将它们所在的表单提交的控件而产生的。 HtmlSelect列表控件中获取所选择的值。 通过HtmlSelect.Items得到一个System.Web.UI.WebControls.ListItemCollection对象的引用,通过Html.SelectedIndex返回第一个被选中项的索引, HtmlSeclect.Value也可返回当前被选中项的value属性的内容,如果没有value属性,则返回text属性。 asp tips1)不像Web窗体页面,代码隐藏类文件必须显式的为该文件使用的所有类导入所有命名空间。
2)每个服务器控件都被作为一个在页面中可以全局利用的对象编译到页面类中。
3)整个页面,包括其中所有的HTML、文本和其他内容,都被编译成了一个类。执行这个类就可以为客户创建输出。
当这个类执行,所有静态的和基于客户机的内容都以响应的方式发送给客户机。所有具有runat="server"属性标记的控件和元素都是在这个页面类中创建的对象。 December 09 asp纪录1)页面高速缓存 高速缓存可以随参数集的不同而变化,包括查询字符串、浏览器类型、用户控制端。 例如:一个页面会随参数的不同而发生变化,则需要指定高速缓存随参数不同而变化。 2)智能导航 智能导航有如下4个属性: 。较少的屏闪 。保持屏滚素位置 。保持聚焦元素位置 。保持历史纪录中的前一个页面 该属性主要是面向这样一些应用程序,它们需要大量回送请求,但其内容没有很大改变。 <%@Page SmartNavigation="true"%> 或者在Web.Config文件中设置 <configuration> <system.web> <pages smartNavigation="true"/> </system.web> </configuration> 3)自定义控件 在ASP.NET页面中除了可以使用HTML和服务器控件之外,你还可以创建自定义的服务器控件。 用户控件的概念是:你可以将可复用的代码或内容创建为独立的ASP.NET控件,然后可以在其他页面中使用这些控件,而不需修改代码。 用户控件实际上就是一个页面(怎么理解),所以仍然可以在page_load事件中执行动作。 用户控件没有<HTML>、<BODY>、<FORM>标签。用户控件可以包含客户端脚本、HTML元素、ASP.NET代码和其他服务器控件。 添加到Web Forms网页中,需要两步,首先,用@Register指令告诉页面,然后,将它添加到我们想要显示该信息的页面中。 (任何可复用的代码都可以转换为控件) 如果要引用到其他装配件,应在控件中引入。 @Control指令 该指令用来给控件指定的属性赋值。 用户控件属性 通过用户控件属性,你可以与用户控件进行交互,要将一个属性传递给用户控件,你只要在将用户控件加入页面时,将这个属性的名字和值添加为参数。 用户控件事件 在处理用户控件事件时要记住最关键的一点是,事件要在用户控件自身中处理。 用户控件的代码后置 同样我们可以在自定义控件中应用代码后置,但我们声明的类要继承UserControl类,必须为用户控件所需的每个服务器控件声明一些public变量。(用来将事件、方法与控件联系起来),通过 <%Control inherits="shipMethodClass" src="shipMethod.vb" ClassName="shipMethod"%> 来将用户控件附着到代码后置文件。 用户控件的局部页面高速缓存 同样我们可以在自定义控件中应用高速缓存。 注:从以上几点特性来看,自定义控件实际上就是一个子页面,页面拥有的功能它基本上都有。所以它的开发与页面的开发应该相似。 ASP学习1)可从服务器代码中访问基于控件的服务器。即使这些控件给出了普通的HTML,同时它们也是标准的HTML表单的一部分,但ASP.NET的结构仍然确保用户可从服务端事件过程中访问它们。 (而在ASP中,表单元素是作为客户端的一部分,在服务器端访问这些元素数据不方便) 2)Page_Load事件在每次执行页面时运行,在该事件中你需要生成控件。 3)控件事件仅仅在被服务器控件激发时运行,这是通过将控件上的事件属性与事件过程名称联系起来实现的。 4)Page_Load在每次页面加载时运行,这有时并不是必要的,为此,Page类提供了一个属性IsPostBack来检测是否是首次加载页面。 5)服务器控件在首次加载后,会产生一个ViewState,保存了我们在控件中保存的信息。 6)即使表象和逻辑在开发应用程序时已经为开发人员区分开了,但是了解它们何时会被执行,何时合并为一个单元,这仍然很重要,即使逻辑和表象存在两个不同的文件中,但在运行时它们仍然会编译到一个对象中,而这个对象就是由Page类表示的。 7)使用代码后置 所谓代码后置就是将内容(HTML和服务器控件)和代码(事件,方法,属性)分离的一种策略。 代码后置的原则就是你为自己的代码创建一个类,并且ASP.NET Page对象中继承该类。这就使得你的类能够访问页面内带代码,同时允许它和回送结构能够进行交互。接着你创建ASP.NET页面并使用一个页面指令来继承新创建的类。 创建代码后置类时你需要遵循一些规则。首先是要引用所要求的名称空间。其次,你需要创建一个继承自Page类的类,在该类中你应该声明要使用的控件,这可以在代码后置类和实际服务器控件之间提供一个链接。在该类中你可以创建事件,方法,属性。 December 08 the key to the creatively
锁1)异步方法调用必然在你的程序中引入并发性,但并发性也会引入潜在的问题,而这些问题很难诊断、调试和修复,毫无疑问,它们是由锁而引起的。 2)锁是一把双刃剑,如果可能要避免使用它们,尤其是使用锁的系统很容易产生死锁的情形,另一种普遍的问题是,由于锁的争用将导致较差的可伸缩性。 3)避免使用锁的最好方法,就是确保并发任务不需要共享任何资源,要避免异步方法访问静态字段,以及引用。 如果一个资源不得不被共享,你至少还可以考虑使用另外一种不用锁的技术。如果共享资源只是一个简单的System.Int32或System.Single类型,那么System.Threading.Interlocked类型提供的一些方法,可用于以线程安全的方式改写、递增或递减共享值。 在某些不得不用到锁的情形下,CLR也提供了对锁的支持。CLR提供了两种基本类型的锁,一种是基于System.Threading.WaitHandle的锁。另一种令人更感兴趣的是监视器和ReadWriterLock. 监视器可以让你通过系统中的任意对象关联一个锁。当CLR为一个对象分配一个锁时,CLR将在对象头中存储一个索引到同步块中。 System.Threading.Monitor类型公开基于监视器的锁。该类型有两个静态方法(Enter和Exit) c#通过lock语句提供了一个对于异常安全的构件。 |
|
|||||||
|
|