教您怎么—打造美好的windows程序(初学者必须要看)

一运用菜单栏和工具栏

日志在总计机连串中是二个极度广阔的概念,任何程序都有大概输出日志:操作系统内核、种种应用服务器等等。日志的始末、规模和用途也各差别,很难一面之识。

1.菜单栏和工具栏有何效益和长处:

本文商讨的日记处理办法中的日志,仅指Web日志。其实并不曾标准的定义,或者包含但不限于各类前端Web服务器——apache、lighttpd、tomcat等发生的用户访问日志,以及各样Web应用程序自个儿输出的日记。

通过菜单栏把应用程序的职能拓展分组,可以有利于用户查找和动用,下图所示的菜单栏包蕴的每一项都是顶层菜单项,顶层菜单项下的选项称为”子菜单”或”菜单项”;

在Web日志中,每条日志经常代表着用户的五次访问行为,例如上边就是一条出色的apache日志:

透过将常用的作用列在工具栏中,使用时,无需去菜单栏中去追寻对应的职能,直接拔取工具栏中的功效即可.

211.87.152.44 – – [18/Mar/2005:12:21:42 +0800] “GET / HTTP/1.1″ 200
899 “http://www.baidu.com/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows
NT 5.1; Maxthon)”

澳门美高梅手机网站 1

从地点那条日志中,大家得以博得许多立见成效的新闻,例如访问者的IP、访问的年月、访问的对象网页、来源的地址以及访问者所接纳的客户端的
UserAgent新闻等。假诺急需越多的音讯,则要用其余手段去拿到:例如想博得用户屏幕的分辨率,一般要求选取js代码单独发送请求;而假诺想获取诸如用户访问的现实音信标题等音信,则恐怕须求Web应用程序在协调的代码里输出。

2.行使菜单栏控件MenuStrip

缘何要分析日志

毫无疑问,Web日志中带有了大批量芸芸众生——紧假设产品分析人士会感兴趣的音讯,最简易的,大家可以从中拿到网站每类页面的PV值(PageView,页面访问量)、独立IP数(即去重今后的IP数量)等;稍微复杂一些的,可以总结得出用户所检索的最主要词名次榜、用户停留时间最高的页面等;更扑朔迷离的,打造广告点击模型、分析用户作为特征等等。

既然如此这一个数据是那样的有用,那么自然已经有广大现成的工具得以支持大家来分析它们,例如awstats、Webalizer,都以特意用来统计分析Web服务器日志的免费程序。

其余还有一类产品,它们不分析直接日志,而是经过让用户在页面中置放js代码的主意来直接进行数量计算,或许说大家得以认为它是直接让日志输出到了它们的服务器。典型的代表出品——家弦户诵的谷歌(Google)Analytics,别的还有国内的cnzz、百度计算等。

有的是人唯恐会说,既然如此,大家怎么还亟需协调来分析日志,有须求吗?当然有。我们的用户(产品分析人士)必要是无穷尽的,下边说的这几类工具纵然很好很强劲,但明显不可以满意全数的须要。

随便地点分析的工具,照旧在线的分析服务,它们尽管提很丰盛的的总结分析效益,可以做肯定程度的布署,不过照旧很有限的。要举行稍复杂点的分析,或然要做依据日志的多少挖掘,照旧亟待协调来达成。

除此以外绝一大半日记分析工具都以只好用于单机的,数据量稍大就没辙了。同时那个提供在线分析的劳务对于单个站点日常也都有最大流量的界定——那是很简单通晓的,他们也急需考虑服务器的载荷。

故而,很多时候依旧得靠本身。

01.在菜单栏中只好添加菜单项(MenuItem),组合框(ComboBox),文本框(TextBox)

怎么开展日志分析

那并不是一个简单易行的标题。即使大家把“日志”限定为Web日志,依旧带有了累累种只怕的格式和数码,而是“分析”更是难以定义,或者是简单的统计值的统计,或然是复杂的数目挖掘算法。

上边并不打算探讨这几个纷纭的标题,而只是暧昧的座谈什么营造进行日志分析工作的根底。有了那一个基础会让基于日志的简便统计分析变得很粗略,并让复杂的分析挖掘等变得实惠。

澳门美高梅手机网站 2

少量数额的情况

先考虑最简便的情景,在数码规模比较小的时候,恐怕是几十MB、几百MB只怕几十GB,可想而知就是在单机处理尚能忍受的时候。一切都很好办,现成的各类Unix/Linux工具——awk、grep、sort、join等都以日记分析的利器,假若单单是想精通某些页面的PV,一个wc+grep就能化解。假诺有稍复杂的逻辑,那就使用各样脚本语言,越发是perl,同盟伟大的正则表明式,基本就可以缓解全部的问题。

比如,大家想从地点提到的apache日志中赢得访问量最高前九十几个IP,已毕很简单:

cat logfile | awk ‘{a[$1]++} END {for(b in a) print
b”\t”a[b]}’|sort -k2 -r|head -n 100

可是当大家需求反复去分析日志的时候,上边的做法在一段时间之后或许就会让大家胃痛如何开展各类日志文件、用于分析的剧本文件、crontab文件等等的掩护,并且可能会设有大气双重的代码来做多少格式的剖析和保洁,那些时候或者就须要更恰当的事物,比如——数据库。

理所当然,要使用数据库来拓展日志分析依旧须求有个别代价的,最要害的就是什么将种种异构的日记文件导入的数据库中——这几个进度一般称为
ETL(Extraction-Transformation-Loading)。幸亏依旧有种种现成的开源、免费的工具来扶助大家做那件工作,并且在日记连串不太多的时候,本人写多少个差不多的脚本来已毕那项工作也并不困难。例如可以将方面的日志去掉不须要的字段,然后导入如下的数据库中:

澳门美高梅手机网站 3

如今亟待考虑一下用怎么样数据库来存储那么些数据。MySQL是1个很经典的开源数据库,它的观念引擎(MyISAM或许InnoDB,行存储)大概并不要命的合乎日志数据的储存,可是在小数据量的时候依然很够用的。而且,在那上头以往已经有了更好的抉择,例如开源且免费的Infobright、
Infinidb,都以尤其为数据仓库应用而进展了优化的多寡引擎,采取列存储,有优良的数据压缩,处理几百GB的数量几乎正常。

行使数据库的功利之一就是,伟大的SQL可以帮我们很简单的形成绝半数以上的计算分析工作——PV只需要SELECT+COUNT,总括搜索词排名只须要SELECT+COUNT+GROUP+O奥迪Q5DE帕杰罗+LIMIT。别的,数据库自己的结构化存储方式也让日志数据的管理变的更简约,收缩运行代价。

同等如故地点的要命例子,简单的壹个SQL就足以消除:

SELECT * FROM (SELECT ip, COUNT(*) AS ip_count FROM apache_log GROUP
BY ip) a ORDER BY ip_count DESC LIMIT 100

至于品质难点,数据库的目录和各样优化机制寻常会让我们的总结分析工作变得更快,并且上边提到的Infobright和Infinidb都专门为接近SUM、COUNt之类的集结应用做了优化。当然也不是纯属的会快,例如在数据库中进行LIKE操作,平日会比grep1个文书还要慢很多。

更进一步的,使用基于数据库的储存,能够很不难的进展OLAP(联机分析处理)应用,从日记中开掘价值会变的尤为简约。

02.菜单栏的机要品质

更加多的数目如何做

三个好的数据库似乎会让工作变的很粗略,但是别忘了前面提到的都以单机数据库。一台单机在存储容量、并发性上必将都是有很大范围的。而日志数据的风味之一就是随时间持续抓好,并且由于众多解析进度往往须求历史数据。长期内的压实恐怕能够经过分库、分表或然数据压缩等来化解,不过很明显并不是长久之计。

想要彻底化解数据规模增加牵动的题目,很当然的会想到利用分布式技术,结合地点的结论,恐怕使用有些分布式数据库是几个好接纳,那么对最后用户就足以完全透明了。那一个的确是很理想的场所,不过具体往往是阴毒的。

率先,完毕相比完善的分布式数据库(受限于CAP原则)是多少个分外复杂的题材,因而在那边并不像单机数据库那样,有那么多开源的好东西可以用,甚至于商用的也并不是太多。当然,也无须相对,固然有钱,还可以考虑一下Oracle
RAC、格林plum之类东西。

附带,绝大多数分布式数据库都以NoSQL的,所以想三番五次用上SQL的那么些优点基本上是没指望,取而代之的都以一些简单易行、难以使用的接口。单从这一点看来,使用这几个数据库的市值已经下滑很多了。

故而,如故先现实一点,先退一步考虑什么缓解的超大规模的日记的解析难题,而不是想怎么着让它变的像在小数码规模时那么简单。单单想做到那一点,近期总的来说并不是太难,并且还是有免费的午宴能够吃。

Hadoop是惊天动地的Apache基金会上边的一套分布式系统,包括分布式文件系统(HDFS)、MapReduce总计框架、HBase等很多组件——那个骨干都以谷歌(Google)的GFS/MapReduce/BigTable的仿造产品。

Hadoop经过数年的前进,近日早就很成熟了,特别是其中的HDFS和MapReduce统计框架组件。数百台机械的集群已经被注脚可以运用,可以承担PB级其他数码。

Hadoop项目中的HBase是八个按列存储的NoSQL分布式数据库,它提供的效果和接口都格外不难,只好进展简要的K-V查询,由此并不直接适用于半数以上日记分析利用。所以一般采取Hadoop来做日志分析,首先依旧必要将日志存储在HDFS中,然后再选择它提供的MapReduce
API编写日志分析程序。

MapReduce是一种分布式编程模型,并简单学习,不过很分明使用它来处理日志的代价依旧远不止单机脚本大概SQL。三个简单易行的词频总计统计或者都要求过多代码——SQL只需求一行,此外还有良莠不齐的环境准备和开行脚本。

譬如说同样如故地点的事例,完结就要复杂的多,常常须要两轮MapReduce来形成。首先要在第一批次的mapper中统计部分ip的拜访次数之和,并以ip为key输出:

//遍历输入,并集结结果

foreach(record in input) {

ip = record.ip;

dict[ip]++;

}

//用emit输出,第四个参数为key,用于reduce的散发

foreach(<ip, count> in dict) {

emit(ip, count);

}

接下来在第一批次的reduce中就足以博得每一种ip完整的计数,能够顺便排个序,并且只保留前九十五个。

count = 0;

//对于每种key(ip),遍历全数的values(count),并丰盛

while(input.values.hasNext()) {

count += input.values.next();

}

//插入到大大小小为100的堆中

heap_insert(input.key, count);

在reduce甘休的时候输出:

//输出当前reduce中count最高的96个ip

foreach(<ip, count> in dict) {

emit(ip, count);

}

是因为reduce一般会有那个个,所以最后还要求将装有reduce的出口进行统壹 、再排序,并获取最后的前九十七个IP以及对应的访问量。

故而,使用Hadoop来做日志分析很显明不是一件简单事情,它拉动了广大的额外的学习和运行费用,然则起码,它让超大规模的日记分析变成了恐怕。

 Name:代码中菜单对象的名称.

何以变得更简约

在超大规模的数码上做任何工作都不是一件简单的事务,包涵日志分析,但也并不是说分布式的日志分析就必将要去写MapReduce代码,总是可以去做特别的空洞,在特定的行使下让事情变得更简便易行。

只怕有人会很当然的想到倘若能用SQL来操作Hadoop上的数量该有多好。事实上,不仅仅唯有你1位会这么想,很多少人都这么想,并且他们已毕了这一个想法,于是就有了Hive。

Hive未来也是Hadoop项目上面的八个子项目,它可以让大家用SQL的接口来执行MapReduce,甚至提供了JDBC和ODBC的接口。有了这些未来,Hadoop基本上被打包成四个数据库。当然实际上Hive的SQL最后如故被翻译成了MapReduce代码来举办,由此尽管最简单易行的
SQL只怕也要举办好几十秒。幸亏在普通的离线日志分析中,这些时刻依然得以接受的。更器重的是,对于地点提到的事例,大家又足以用相同的SQL来成功分析职务了。

理所当然Hive并不是一点一滴的匹配SQL语法,而且也不或者不辱职务一心的对用户屏蔽细节。很多时候为了履行质量的优化,如故亟待用户去精晓一些MapReduce的基本知识,依照自个儿的使用形式来设置某些参数,否则我们可能会发觉贰个查询执行很慢,可能压根执行不出去。

除此以外,很分明Hive也并不只怕遮盖全部的必要,所以它依然保存插入原始MapReduce代码的接口,以便扩大。

 Items:在菜单中显示的项的集合.

越多的标题

固然有了Hive那样三个近乎于数据库的东西,我们如故还有不少事情需求做。例如时间久了,只怕会有更为多的须要例行执行的SQL,而那些SQL
中,恐怕有部分是做了再次的工作;恐怕有局地的举行效能尤其低下,贰个错综复杂的SQL就占满了具备的算计能源。那样的系列会变得尤为难以维护的,直到有一天例行的SQL终于跑不完了。而最后用户往往不会去关注那些事情,他们只关怀自个儿交到的询问是否能即时收获响应,怎么着才能赶紧的拿到结果。

举个不难的事例,假设发未来利用apache_log的拥有查询中,大致从不人用其中的user_agent字段,那么我们全然可以把那个字段去除掉,大概拆分成两张表,以减弱多数查询的IO时间,升高实践的成效。

为了系统化的消除那个标题,大家只怕须求引入例行义务的调度机制,大概必要去分析全部的SQL来发现什么是可以统一的、哪些的性能需求优化,使用的数据表是否要求做水平还是垂直分表等等。依照实际景况的不比,这时工作恐怕是人为来落成,也或许是写程序来机关分析并调动。

澳门美高梅手机网站,并且随着日志类型、分析需要的不止增强。用户会愈加多的埋怨很难找到想要的多寡在哪份日志里,大概跑的精粹的查询因为日志格式的变迁而赫然不可以用了。此外上边提到的ETL进程也会变得复杂,简单的转移导入脚本很大概已经化解不了难题。那时候大概须求构建三个数目管理连串,恐怕大概考虑建立八个所谓的数据仓库。

简单的说,随着日志数据量、日志类型、用户数量、分析需要等等的持续增长,越多的难点会逐步呈现出来,日志分析这件工作或然就不再像大家最初想的那么粗略,会变得更为有价值,也愈来愈有挑衅。

 Text:与菜单项关联的文本.

03.在Items属性的编写窗口中,可以添加菜单项(MenuItem),组合框(ComboBox),文本框(TextBox),分隔菜单项(Separator),也可以安装每一项的性格,还足以调整各项的排列顺序.

澳门美高梅手机网站 4

04.菜单项的机要品质和事件:

属性:

Name:代码中菜单项对象的名称.

DropDownItems:在子菜单中突显的项的集合.

Text:与菜单项相关联的文本.

事件:

Click:选中该菜单项时,触发该事件.

05.有关菜单栏神速键:

方法一:在菜单栏的性质中找到Text属性:写新建(&A)在菜单项写项目(&B)
文件(&C),就会达成如此2个作用

打开形式:首先必须按住alt+主菜单快速键进入到对应的主菜单,然后径直按F就可以打开子窗体。

澳门美高梅手机网站 5

开拓缺点:必须先用alt+字符,先稳住到一流菜单,然后按B键C键才能稳定到对应内容

方式二:

开拓属性找到shortCutKeys,创设对应的组合键,可以在主界面一向按对应的字母键就可以打开子窗体,假诺设置疾速键(Ctrl+B)。按火速键Ctrl+B直接打开项目

打开.优点:可以跳过1级菜单,直接调用需求的窗口和分割线

澳门美高梅手机网站 6

06有关分割线的画法:

<1>插入分割线

 澳门美高梅手机网站 7                      

<2>输入减号(-)

3.Application.Exit()和this.Close()的区别

Application.Exit() this.Close()
应用程序类Application的静态方法,用于退出当前应用程序.

实例方法,用于关闭当前窗体;如果当前窗体是系统启动的

窗体,则执行该方法关闭窗体后,应用程序退出.

如果当前应用程序打开了多个窗体,则关闭所有窗体 如果当前应用程序打开多个窗体,只关闭当前窗体
关闭窗体时,不会触发窗体的FormClosing和FormClosed事件 关闭窗体时,会触发窗体的FormClosing和FormClosed事件

4.应用工具栏控件ToolStrip

澳门美高梅手机网站 8

澳门美高梅手机网站 9

01.注意点:工具栏中只囊括上述图中的控件.

02.工具栏控件的第②品质:

ImagesScalingSize:工具栏中的项呈现的图像的大小.

 

Items:在工具栏上显示的项的集合.

注:在Itens属性的编纂窗口中,可以伸张,删除项,也足以调动各项的排列顺序,还足以安装其中每一项的属性. 

03.工具栏上的按钮和标签的首要质量和事件.

属性:

DisplayStyle:设置图像和文件的突显格局,包蕴展现文本,突显图像,展现文本或图像或怎么样都不显示.

Image:按钮/标签上出示的图纸

ImageScaling:是不是调整按钮/标签上显示的图纸的大大小小

Text:按钮/标签上突显的文本

TextImageRelation:按钮/标签上图像与公事的争辩地方.

事件:

Click:单击按钮/标签是,触发的事件.

04.关于设置工具栏中图纸的轻重难点:

率先入选整个ToolsStrip控件,找到属性ImageScalingSize属性,可以设置width的大大小小和height的大小.

澳门美高梅手机网站 10

二运用WinForms的骨干控件

1.单选按钮:(RadioButton)

澳门美高梅手机网站 11

为用户提供由八个或七个互斥选项组成的的精选的集合.

单选按钮的机要品质和事件:

属性:

Checked:提示单选按钮是不是已选中.

Text:单选按钮突显的文本.

事件:

Click:单机单选按钮是爆发.

2.分组框:(GroupBox)

澳门美高梅手机网站 12

用来为任何控件提供可识其他分组,日常接纳分组框按效益细分窗体.

3.面板:(Panel)

澳门美高梅手机网站 13

他的功力和分组框类似,都以用来将控件分组的.唯一差异就是面板没有标题,但足以来得滚动条.

4.容器控件GroupBox和Panel的不一样:

GroupBox(分组框) Panel(面板)

用于逻辑的组合一组控件,如RadioButton和CheckBox控件,

显示一个框架,框架上有一个标题.

用于包含多个控件,以便将这些控件编为一组,方便操作这些控件.

5.日期控件.

澳门美高梅手机网站 14

提供一种可以用来采用日期的下拉式日历,从而幸免手工输入带来的不要求麻烦.

日子控件的首要质量:

马克斯Date:取得设定最大日子和时间.

MinDate:取得设定最小日期和时间.

Value:控件所选定的日子/时间值.

Format:用于安装控件中显示的日期和时间的格式.

6使用Anchor属性和Dock属性:

<1>Anchor属性:Anchor是锚定的意味,用于安装控件相对于窗体的某部边缘的离开保持不变,从而完结随窗体的更动动态调整控件的大小.Winform中的每一种控件都有该属性.

锚定控件的手续:

01.选定要锚定的控件

02.在”属性”窗口中,单击Anchor属性的右边的下拉按钮,显示Anchor属性的编辑器

03.在呈现的”十字星”上摘取或免除控件锚定的边.

04.单击Anchor属性名,关闭Anchor属性编辑器.

<2>使用Dock属性:

01.挑选要停靠的控件.

02.在”属性”窗口中,单击Dock属性左侧的下拉按钮,展现Dock编辑器.

03.增选停靠情势,单击最上面的”None”清除停靠格局.

04.单击Dock属性名,关闭Dock编辑器.

Anchor和Dock属性的下结论:

Anchor:让控件和窗体边缘的职位保持一定的像素值。

Dock:使控件停靠在窗体的某部部位(Top,Bottom,Left,索罗德Ight),或许填充整个窗体(Fill)

三开立MDI应用程序:

1.创建MDI:

01.安装父窗体:将父窗体的IsMdiContainer属性设置成True.

02.设置子窗体:在调用打开子窗体的Show()方法从前,在代码中将子窗体的MdiParent属性设置为this.

四.组合框ComboBox控件.

Items是组合框的品质,他意味着组合框中项的汇集,,当对组合框中的项举行操作的时候,都会用到Items属性,它的档次为ComboBox.ObjectCollection

ComboBox.ObjectCollection类型的常用的质量和形式

属性:

Count:得到集合中项的数目.

DropDownStyle:获取或设置钦点组合框样式的值.

IsReadOnly:获取提示可以修改该集合的值.

Item:检索集合中内定索引的项.

方法:

Add():向组合框的项列表中添加项.

Clear():从组合框中移除全数项.

Remove():从组合框中移除钦命的项.

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注