[收藏]整理了一些T-SQL技巧
一、 只复制一个表结构,不复制数据
二、 获取数据库中某个对象的创建脚本
三、 分隔字符串
四、 一条语句执行跨越若干个数据库
五、 怎样获取一个表中所有的字段信息
六、 时间格式转换问题
七、 分区视图
八、 树型的实现
九、 排序问题
十、 一条语句删除一批记录
十一、获取子表内的一列数据的组合字符串
一、 只复制一个表结构,不复制数据
如果有一个用逗号分割开的字符串,比如说"a,b,c,d,1,2,3,4",如何用t-sql获取这个字符串有几个元素,获取第几个元素的值是多少呢?因为t-sql里没有split函数,也没有数组的概念,所以只能自己写几个函数了。
1、 获取元素个数的函数
因为新开发的软件需要用一些旧软件生成的一些数据,在时间格式上不统一,只能手工转换,研究了一下午写了三条语句,以前没怎么用过convert函数和case语句,还有"+"操作符在不同上下文环境也会起到不同的作用,把我搞晕了要,不过现在看来是差不多弄好了。
二、 获取数据库中某个对象的创建脚本
三、 分隔字符串
四、 一条语句执行跨越若干个数据库
五、 怎样获取一个表中所有的字段信息
六、 时间格式转换问题
七、 分区视图
八、 树型的实现
九、 排序问题
十、 一条语句删除一批记录
十一、获取子表内的一列数据的组合字符串
一、 只复制一个表结构,不复制数据
[quote] selec top 0 * into [t1] from [t2][/quote]
三、 分隔字符串
如果有一个用逗号分割开的字符串,比如说"a,b,c,d,1,2,3,4",如何用t-sql获取这个字符串有几个元素,获取第几个元素的值是多少呢?因为t-sql里没有split函数,也没有数组的概念,所以只能自己写几个函数了。
1、 获取元素个数的函数
create function getstrarrlength (@str varchar(8000))
returns int
as
begin
declare @int_return int
declare @start int
declare @next int
declare @location int
selec @str =','+ @str +','
selec @str=replace(@str,',,',',')
selec @start =1
selec @next =1
selec @location = charindex(',',@str,@start)
while (@location <>0)
begin
selec @start = @location +1
selec @location = charindex(',',@str,@start)
selec @next =@next +1
end
selec @int_return = @next-2
return @int_return
end
六、 时间格式转换问题
因为新开发的软件需要用一些旧软件生成的一些数据,在时间格式上不统一,只能手工转换,研究了一下午写了三条语句,以前没怎么用过convert函数和case语句,还有"+"操作符在不同上下文环境也会起到不同的作用,把我搞晕了要,不过现在看来是差不多弄好了。
1、把所有"70.07.06"这样的值变成"1970-07-06"
UPDATE lvshi
SET shengri = '19' + REPLACE(shengri, '.', '-')
WHERE (zhiyezheng = '139770070153')
2、在"1970-07-06"里提取"70","07","06"
selec SUBSTRING(shengri, 3, 2) AS year, SUBSTRING(shengri, 6, 2) AS month,
SUBSTRING(shengri, 9, 2) AS day
FROM lvshi
WHERE (zhiyezheng = '139770070153')
3、把一个时间类型字段转换成"1970-07-06"
UPDATE lvshi
SET shenling = CONVERT(varchar(4), YEAR(shenling))
+ '-' + CASE WHEN LEN(MONTH(shenling)) = 1 THEN '0' + CONVERT(varchar(2),
month(shenling)) ELSE CONVERT(varchar(2), month(shenling))
END + '-' + CASE WHEN LEN(day(shenling)) = 1 THEN '0' + CONVERT(char(2),
day(shenling)) ELSE CONVERT(varchar(2), day(shenling)) END
WHERE (zhiyezheng = '139770070153')
http://dev.csdn.net/develop/article/83/83138.shtm
posted @ 2006-04-21 09:33 kittow╃天笑╃ 阅读(219) 评论(0) 编辑
SourceForge开始全面支持Subversion,这真是个好消息,这预示着CVS独霸天下的时代快要结束,SVN时代就要来临。 和CVS比起来,SVN的确很强大,这就像它的出现就是为了取代CVS一样,它的目标快要实现了。
具体的功能特性大家可以上Subversion官方网站查看,这里没必要给出那段生涩不好翻译的英语短句了。
官方中文网站在这儿,不过这个站的网络通讯太差劲了,一个礼拜5天都上不去:(
欣慰的是这里有个网站提供一本免费的、非常棒的SVN图书,可以选择在线查看或者下载PDF,有中文版哦,SVN使用者必读。
如果你对SVN还是表示怀疑可以在这里查看国外网友写的一篇各个版本控制系统功能比较的文章,相信看过后你不会再对SVN表示怀疑了。
英文看不懂?幸好,有网友将那篇生涩的英文SVN特性用生涩的中文表述出来了 ,中文英文对照着看,凑合着还行。
冲动的你这时已经手痒痒的想尝试下SVN的魅力,但苦于现在的项目已经建立在CVS上。别担心,这里正好有一篇文章介绍如何将CVS的Repository转换成SNV,转换方法来自这个程序http://cvs2svn.tigris.org/。
如何使用SVN我这里不再介绍,官方的那本书是最好的教程,网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个SVN辅助的软件:
1、SubVersion,从 http://subversion.tigris.org/ 下载,是实现服务系统的软件,必装的。
2、TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便,commit动作变得就像Winrar右键压缩一样方便。
3、SVNService.exe,从 http://dark.clansoft.dk/~mbn/svnservice/ 下载,是专为 SubVersion 开发的一个用来作为 Win32 服务挂接的入口程序。
4、AnkhSVN,从http://ankhsvn.tigris.org/下载,这是一个专为Visual Studio提供SVN的插件。
5、Subversive,从http://www.polarion.org/p_subversive.php下载,这时一个为Eclipse提供SVN的插件,据说已经和Eclipse自带的CVS功能有一拼。
6、还有很多很多SVN相关的工具以及使用TIP介绍,大家可以上官方的相关链接页面中查看,地址:http://subversion.tigris.org/links.html
http://www.duduwolf.com/post/subversion.asp#cmt1766
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(92) 评论(0) 编辑
摘要:很多人看过GOF的《Design Patterns》,对这23种模式也背得滚瓜烂熟。但重要的不是你熟记了多少个模式的名称,关键还在于付诸实践的运用。为了有效地设计,而去熟悉某种模式所花费的代价是值得的,因为很快你会在设计中发现这种模式真的很好,很多时候它令得你的设计更加简单了。
其实在软件设计人员中,唾弃设计模式的可能很少,盲目夸大设计模式功用的反而更多。言必谈“模式”,并不能使你成为优秀的架构师。真正出色的设计师,懂得判断运用模式的时机。
还有一个问题是,很多才踏入软件设计领域的人员,往往对设计模式很困惑。对于他们来说,由于没有项目的实际经验,OO的思想也还未曾建立,设计模式未免过于高深了。其实,即使是非常有经验的程序员,也不敢夸口对各种模式都能合理应用。
设计,看上去很美
Do the simplest thing that could possibly work! 这是XP人士大声疾呼的口号,我也举双手赞成。
UML重要吗?
我现在看一个设计方案的时候,更希望先看看UML图,然后再看文档的实际描述。如果让我读一段代码,我希望能先看看类图,或许更容易理解代码的含义。UML在OO世界里像是世界语,它便于程序员间的交流,让别人更容易理解你的意图。同时,在设计UML图的过程中,也是一种对思路的清理,对客户需求的把握,设计思想的跟踪。
原贴地址:
http://blog.joycode.com/wayfarer/archive/2005/11/17/67204.aspx
wayfarer其他文章和电子书:
设计之道
电子书下载:http://www.cnblogs.com/files/wayfarer/设计之道.rar
PetShop与设计
电子书下载:http://www.cnblogs.com/files/wayfarer/petshopanddesign.rar
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(36) 评论(0) 编辑
事实上,大部分被称为Web2.0的应用都是由程序员角色的人员率先开发的。从RSS标准的建立到Del.icio.us社会书签系统的流行,都证实了这点。因此,程序员不应无视Web2.0这种自己创造的新模式。当然,陷入那些关于Web2.0特性的争论中是没有意义的,我们需要的是拨开浮躁的面纱,真正关注Web2.0到底如何指导Web应用和产品开发,会给程序员的工作和发展带来怎样的变化,程序员又如何更好适应这些变化。
原文链接:
http://blog.donews.com/yanhui/archive/2006/03/06/755169.aspx
本文刊发《程序员》杂志2006年第3期,转载请注明来源及作者。
Web2.0的这个1.0加在哪里?
http://home.donews.com/donews/article/9/92469.html
电子商务世界:Web2.0 真实的谎言
http://home.donews.com/donews/article/9/92471.html
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(40) 评论(0) 编辑
原文链接:http://blog.donews.com/maitian99/archive/2006/03/07/755924.aspx先不说什么是好的“用户体验”――最差的用户体验是引发了用户不知道该“做什么”的“挫折感”。可以从两个方面证明上述判断:第一,从用户心理来说,访问互联网和读书看报不一样,互联网信息量太多,获取信息的方式太快,使得个体在上网时,相比使用传统媒体,内心普遍存在焦虑或潜在焦虑。在此大背景下,如果网站不但没有缓解焦虑,反而让他们在焦虑之上,更受挫折,显然糟糕;第二,从媒介特性来看,个体通过互联网和传统媒体比较,获取信息的方式是不一样的--传统媒体,我们获得信息是信息的本身,得到“是什么”的一个体验;而互联网上,我们看到的不只是信息本身,更重要的是超链的存在,使得我们更为关注下一步要“做什么”(按照麦克卢汉的理论,这就是媒介本身的性质决定了其上信息的性质)。因此对于传统媒体来说,最差的用户体验是用户不知道“是什么”,看了白看;而对于互联网来说,最差的用户体验是用户不知道该“做什么”,这就是“挫折感”。
(这里说明一下,关于用户体验的“做什么”,有一篇文章也谈到了这个观点,但我忘记出处了。故特此声明一下,不掠人之美,呵呵)
我们举两个例子来说明:第一,很多网站的首页头图,为了更多传递信息,通常会做一个4-6帧切换的flash头图。从表面看,这个设计最大限度地利用了头图的空间(原来只能放一个头图,现在可以放4-6个了);但实际上,我认为这是一个很失败的用户体验,原因就是用户看到这里的时候,他不知道下一张会出现什么,或者刚刚看明白这帧,想点击的时候,系统已经切换到下一帧了。这些都会让用户产生挫折感!――我注意到,网易新闻自从李甬主政后,用户体验做了很大改变,比如他们现在头条就不是系统切换,而是让用户自己点击“我来换头条”。这就是尊重用户体验的一个小小改进。第二个例子,我们QQ或msn聊天时,不想和对方继续聊的时候,往往是打一个“:)”;这样对方将不知道你到底要表达什么,因此自然会产生“挫折感”而中止谈话――这就是你传递了一个差的用户体验给你的用户。:)
所以要做好用户体验,很明显,第一个关键是网站设计要符合“逻辑”。因为“逻辑”是一种必然,是对用户最直接的“承诺”,最直接地告诉用户应该“做什么”。至于什么是网站的逻辑,我还是以网易新闻为例:比如,今天的网易“两会”报道如下:
中国今年投入上千亿元缩小贫富差距 代表称“这是欠账还债”
我国行政管理费用25年增长87倍 委员称行政成本之高世界少有
吴敬琏:十一五不会再分钱分物分项目 5年必须转移4500万农业劳动力
林毅夫建议给予公务员医生现金补贴买房 住房应“倒逼成本”定价
“一刀切”利息税应调整 委员称穷人富人相同税率起不到再分配功能
这5条新闻中,标题都截断为左右两个部分――1\2\3\5的右侧标题是不可点击的;但偏偏第4条的右侧标题又是可点击的。这样的设计,就是不符合“逻辑”;因为正常的网站设计逻辑是要么你都可以点击,要么你都不可点击。
从这个例子,概述之,网站的“逻辑”是指你在给用户一个服务或功能时,一定要保证此服务或功能的“同一性”,而不是一种或然;其次,网站的“逻辑”还在于整体服务或功能可以被用户“推演”,即用户了解了一个服务和功能后,他能基本预测准确该网站另外的服务和功能。
做好用户体验,第二个关键点是要尊重“常识和习惯”。还是举例:几乎所有的国外BBS都是上方导航,而几乎所有的国内BBS都是左侧导航;所以如果你在国内做BBS,在这点上完全没必要去挑战用户的使用习惯。这点一说大家都明白,不展开了。
做好用户体验,第三个关键点是“风格”,也就是差异化。没辙,还是得举例,还是举例网易新闻。网易新闻的改版,先不说是否成功,但绝对是一次有风格的改版;风格太明显了!因此我认为,这个改版,相比sina模式之下亦步亦趋的sohu新闻,网易就高明很多。用这个例子也想说明,即使某个地方用户体验有瑕疵,但如果你坚持一个特别的风格,你还是能让用户访问的。
把握好逻辑、常识和风格,用户体验就不会差到哪里去;但这是一个依靠经验和实践的过程,很多时候只能意会,难于言传――所以写这篇文章其实也没必要。:)
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(45) 评论(0) 编辑
2003-01-01· ·冯睿··yesky简介:
本文描述了如何通过一些技术手段来提高VB代码的执行效率。这些手段可以分为两个大的部分:编码技术和编译优化技术。在编码技术中介绍了如何通过使用高效的数据类型、减少外部引用等编程手段来提高代码执行速度,减少代码消耗的系统资源。在编译优化技术中介绍了如何正确地利用VB提供的编译选项对在编译时最后生成的可执行文件进行优化。
前言
什么是一个高效的软件?一个高效的软件不仅应该比实现同样功能的软件运行得更快,还应该消耗更少的系统资源。这篇文章汇集了作者在使用VB进行软件开发时积累下来的一些经验,通过一些简单的例子来向你展示如何写出高效的VB代码。其中包含了一些可能对VB程序员非常有帮助的技术。在开始之前,先让我陈清几个概念。
让代码一次成型:在我接触到的程序员中,有很多人喜欢先根据功能需求把代码写出来,然后在此基础上优化代码。最后发现为了达到优化的目的,他们不得不把代码再重新写一遍。所以我建议你在编写代码之前就需要考虑优化问题。
把握好优化的结果和需要花费的工作之间的关系:通常当完成了一段代码,你需要检查和修改它。在检查代码的过程中,也许你会发现某些循环中的代码效率还可以得到进一步的改进。在这种情况下,很多追求完美的程序员也许会立马修改代码。我的建议是,如果修改这段代码会使程序的运行时间缩短一秒,你可以修改它。如果只能带来10毫秒的性能改进,则不做任何改动。这是因为重写一段代码必定会引入新的错误,而调试新的代码必定会花掉你一定的时间。程序员应该在软件性能和开发软件需要的工作量之间找一个平衡点,而且10毫秒对于用户来说也是一个不能体会到的差异。
在需要使用面向对象方法的时候尽量使用它;VB提供的机制不完全支持面向对象的设计和编码,但是VB提供了简单的类。大多数人认为使用对象将导致代码的效率降低。对于这一点我个人有些不同的意见;考察代码的效率不能纯粹从运行速度的角度出发,软件占用的资源也是需要考虑的因素之一。使用类可以帮助你在整体上提升软件的性能,这一点我会在后面的例子中详细说明。
当你编写VB代码的时候,希望你能把上面几点作为指导你编码的原则。我把文章分为两个部分:如何提高代码的运行速度和编译优化。
如何提高代码的运行速度
下面的这些方法可以帮助你提高代码的运行速度:
1. 使用整数(Integer)和长整数(Long)
提高代码运行速度最简单的方法莫过于使用正确的数据类型了。也许你不相信,但是正确地选择数据类型可以大幅度提升代码的性能。在大多数情况下,程序员可以将Single,Double和Currency类型的变量替换为Integer或Long类型的变量,因为VB处理Integer和Long的能力远远高于处理其它几种数据类型。
在大多数情况下,程序员选择使用Single或Double的原因是因为它们能够保存小数。但是小数也可以保存在Integer类型的变量中。例如程序中约定有三位小数,那么只需要将保存在Integer变量中的数值除以1000就可以得到结果。根据我的经验,使用Integer和Long替代Single,Double和Currency后,代码的运行速度可以提高将近10倍。
2. 避免使用变体
对于一个VB程序员来说,这是再明显不过的事情了。变体类型的变量需要16个字节的空间来保存数据,而一个整数(Integer)只需要2个字节。通常使用变体类型的目的是为了减少设计的工作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。
在这里顺带提一句,对于Object对象也存在同样的问题。请看下面的代码:
Dim FSO
Set FSO = New Scripting.FileSystemObject
或
Dim FSO as object
Set FSO = New Scripting.FileSystemObject
上面的代码由于在申明的时候没有指定数据类型,在赋值时将浪费内存和CPU时间。正确的代码应该象下面这样:
Dim FSO as New FileSystemObject
3. 尽量避免使用属性
在平时的代码中,最常见的比较低效的代码就是在可以使用变量的情况下,反复使用属性(Property),尤其是在循环中。要知道存取变量的速度是存取属性的速度的20倍左右。下面这段代码是很多程序员在程序中会使用到的:
Dim intCon as Integer
For intCon = 0 to Ubound(SomVar())
Text1.Text = Text1.Text & vbcrlf & SomeVar(intCon)
Next intCon
下面这段代码的执行速度是上面代码的20倍。
Dim intCon as Integer
Dim sOutput as String
For intCon = 0 to Ubound(SomeVar())
sOutput = sOutput & vbCrlf &
SomeVar(intCon)
Next
Text1.Text = sOutput
4. 尽量使用数组,避免使用集合
除非你必须使用集合(Collection),否则你应该尽量使用数组。据测试,数组的存取速度可以达到集合的100倍。这个数字听起来有点骇人听闻,但是如果你考虑到集合是一个对象,你就会明白为什么差异会这么大。
5. 展开小的循环体
在编码的时候,有可能遇到这种情况:一个循环体只会循环2到3次,而且循环体由几行代码组成。在这种情况下,你可以把循环展开。原因是循环会占用额外的CPU时间。但是如果循环比较复杂,你就没有必要这样做了。
6. 避免使用很短的函数
和使用小的循环体相同,调用只有几行代码的函数也是不经济的--调用函数所花费的时间或许比执行函数中的代码需要更长的时间。在这种情况下,你可以把函数中的代码拷贝到原来调用函数的地方。
7. 减少对子对象的引用
在VB中,通过使用.来实现对象的引用。例如:
Form1.Text1.Text
在上面的例子中,程序引用了两个对象:Form1和Text1。利用这种方法引用效率很低。但遗憾的是,没有办法可以避免它。程序员唯一可以做就是使用With或者将用另一个对象保存子对象(Text1)。
' 使用With
With frmMain.Text1
.Text = "Learn VB"
.Alignment = 0
.Tag = "Its my life"
.BackColor = vbBlack
.ForeColor = vbWhite
End With
或者
' 使用另一个对象保存子对象
Dim txtTextBox as TextBox
Set txtTextBox = frmMain.Text1
TxtTextBox.Text = "Learn VB"
TxtTextBox.Alignment = 0
TxtTextBox.Tag = "Its my life"
TxtTextBox.BackColor = vbBlack
TxtTextBox.ForeColor = vbWhite
注意,上面提到的方法只适用于需要对一个对象的子对象进行操作的时候,下面这段代码是不正确的:
With Text1
.Text = "Learn VB"
.Alignment = 0
.Tag = "Its my life"
.BackColor = vbBlack
.ForeColor = vbWhite
End With
很不幸的是,我们常常可以在实际的代码中发现类似于上面的代码。这样做只会使代码的执行速度更慢。原因是With块编译后会形成一个分枝,会增加了额外的处理工作。
8. 检查字符串是否为空
大多数程序员在检查字符串是否为空时会使用下面的方法:
If Text1.Text = "" then
' 执行操作
End if
很不幸,进行字符串比较需要的处理量甚至比读取属性还要大。因此我建议大家使用下面的方法:
If Len(Text1.Text) = 0 then
' 执行操作
End if
9. 去除Next关键字后的变量名
在Next关键字后加上变量名会导致代码的效率下降。我也不知道为什么会这样,只是一个经验而已。不过我想很少有程序员会这样画蛇添足,毕竟大多数程序员都是惜字如金的人。
' 错误的代码
For iCount = 1 to 10
' 执行操作
Next iCount
' 正确的代码
For iCount = 1 to 10
' 执行操作
Next
10. 使用数组,而不是多个变量
当你有多个保存类似数据的变量时,可以考虑将他们用一个数组代替。在VB中,数组是最高效的数据结构之一。
11. 使用动态数组,而不是静态数组
使用动态数组对代码的执行速度不会产生太大的影响,但是在某些情况下可以节约大量的资源。
12. 销毁对象
无论编写的是什么软件,程序员都需要考虑在用户决定终止软件运行后释放软件占用的内存空间。但遗憾的是很多程序员对这一点好像并不是很在意。正确的做法是在退出程序前需要销毁程序中使用的对象。例如:
Dim FSO as New FileSystemObject
' 执行操作
' 销毁对象
Set FSO = Nothing
对于窗体,可以进行卸载:
Unload frmMain
或
Set frmMain = Nothing
13. 变长和定长字符串
从技术上来说,与变长字符串相比,定长字符串需要较少的处理时间和空间。但是定长字符串的缺点在于在很多情况下,你都需要调用Trim函数以去除字符串末的空字符,这样反而会降低代码效率。所以除非是字符串的长度不会变化,否则还是使用变长字符串。
14. 使用类模块,而不是ActiveX控件
除非ActiveX控件涉及到用户界面,否则尽量使用轻量的对象,例如类。这两者之间的效率有很大差异。
15. 使用内部对象
在涉及到使用ActiveX控件和DLL的时候,很多程序员喜欢将它们编译好,然后再加入工程中。我建议你最好不要这样做,因为从VB连接到一个外部对象需要耗费大量的CPU处理能力。每当你调用方法或存取属性的时候,都会浪费大量的系统资源。如果你有ActiveX控件或DLL的源代码,将它们作为工程的私有对象。
16. 减少模块的数量
有些人喜欢将通用的函数保存在模块中,对于这一点我表示赞同。但是在一个模块中只写上二三十行代码就有些可笑了。如果你不是非常需要模块,尽量不要使用它。这样做的原因是因为只有在模块中的函数或变量被调用时,VB才将模块加载到内存中;当VB应用程序退出时,才会从内存中卸载这些模块。如果代码中只有一个模块,VB就只会进行一次加载操作,这样代码的效率就得到了提高;反之如果代码中有多个模块,VB会进行多次加载操作,代码的效率会降低。
17. 使用对象数组
当设计用户界面时,对于同样类型的控件,程序员应该尽量使用对象数组。你可以做一个实验:在窗口上添加100个PictureBox,每个PictureBox都有不同的名称,运行程序。然后创建一个新的工程,同样在窗口上添加100个PictureBox,不过这一次使用对象数组,运行程序,你可以注意到两个程序加载时间上的差别。
18. 使用Move方法
在改变对象的位置时,有些程序员喜欢使用Width,Height,Top和Left属性。例如:
Image1.Width = 100
Image1.Height = 100
Image1.Top = 0
Image1.Left = 0
实际上这样做效率很低,因为程序修改了四个属性,而且每次修改之后,窗口都会被重绘。正确的做法是使用Move方法:
Image1.Move 0,0,100,100
19. 减少图片的使用
图片将占用大量内存,而且处理图片也需要占用很多CPU资源。在软件中,如果可能的话,可以考虑用背景色来替代图片--当然这只是从技术人员的角度出发看这个问题。
20. 使用ActiveX DLL,而不是ActiveX控件
如果你设计的ActiveX对象不涉及到用户界面,使用ActiveX DLL。
编译优化
我所见过的很多VB程序员从来没有使用过编译选项,也没有试图搞清楚各个选项之间的差别。下面让我们来看一下各个选项的具体含义。
1. P-代码(伪代码)和本机代码
你可以选择将软件编译为P-代码或是本机代码。缺省选项是本机代码。那什么是P-代码和本机代码呢?
P-代码:当在VB中执行代码时,VB首先是将代码编译为P-代码,然后再解释执行编译好的P-代码。在编译环境下,使用这种代码要比本机代码快。选择P-代码后,编译时VB将伪代码放入一个EXE文件中。
本机代码:本机代码是VB6以后才推出的选项。当编译为EXE文件后,本机代码的执行速度比P-代码快。选择本机代码后,编译时VB使用机器指令生成EXE文件。
在使用本机代码进行编译时,我发现有时候会引入一些莫名其妙的错误。在编译环境中我的代码完全正确地被执行了,但是用本机代码选项生成的EXE文件却不能正确执行。通常这种情况是在卸载窗口或弹出打印窗口时发生的。我通过在代码中加入DoEvent语句解决了这个问题。当然出现这种情况的几率非常少,也许有些VB程序员从来没有遇到过,但是它的确存在。
在本机代码中还有几个选项:
a) 代码速度优化:该选项可以编译出速度较快的执行文件,但执行文件比较大。推荐使用
b) 代码大小优化:该选项可以编译出比较小的执行文件,但是以牺牲速度为代价的,不推荐使用。
c) 无优化:该选项只是将P-代码转化为本机代码,没有做任何优化。在调试代码时可以使用。
d) 针对Pentium Pro优化:虽然该项不是本机代码中的缺省选项,但是我通常会使用该选项。该选项编译出的可执行程序在Pentium Pro和Pentium 2以上的机器上可以运行得更快,而在比较老的机器上要稍稍慢一些。考虑到现在用Pentium 2都是落伍,所以推荐大家使用该选项。
e) 产生符号化调试信息:该项在编译过程中生成一些调试信息,使用户可以利用Visual C++一类的工具来调试编译好的代码。使用该选项会生成一个.pdf文件,该文件记录了可执行文件中的标志信息。当程序拥有API函数或DLL调用时,该选项还是比较有帮助的。
2. 高级优化
高级优化中的设置可以帮助你提高软件的速度,但是有时候也会引入一些错误,因此我建议大家尽量小心地使用它们。如果在代码中有比较大的循环体或者复杂的数学运算时,选中高级优化中的某些项会大幅度提升代码的性能。如果你使用了高级优化功能,我建议你严格测试编译好的文件。
a) 假定无别名:可以提高循环体中代码的执行效率,但是在如果通过变量的引用改变变量值的情况下,例如调用一个方法,变量的引用作为方法的参数,在方法中改变了变量的值的话,就会引发错误。有可能只是返回的结果错误,也有可能是导致程序中断运行的严重错误。
b) 取消数组绑定检查、取消整数溢出检查和取消浮点错误检查:在程序运行时,如果通过这些检查发现了错误,错误处理代码会处理这些错误。但是如果取消了这些检查,发生了错误程序就无法处理。只有当你确定你的代码中不会出现上面的这些错误时,你才可以使用这些选项。它们将使软件的性能得到很大的提升。
c) 允许不舍入的浮点操作:选择该选项可以是编译出来的程序更快地处理浮点操作。它唯一的缺点就是在比较两个浮点数时可能会导致不正确的结果。
d) 取消Pentium FDIV安全检查:该选项是针对一些老的Pentium芯片设置的,现在看来已经过时了。
http://dev.csdn.net/article/18/18415.shtm
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(76) 评论(1) 编辑
ActiveX控件运行在客户端。我们可以获得客户端的一些信息,如IC卡的信息,客户端的验证等等。但是ActiveX控件也有许多缺点:客户端的部署很困难,如客户端不能正确下载,下载了以后不能正确执行,下载的时候需要设置IE的安全级别等等。更多的时候,我都在使用COM组件来扩展ASP的功能。准确地说,是服务端运行的Activex Dll组件。使用Server.CreateObject(“工程名.类名”)即可完成对组件的调用。这种方式问题很少,只要组件中以PUBLIC对外暴露方法既可。但是,有时候我们必须使用ACTIVEX 控件(*.OCX)嵌入到网页中执行来获取客户端的信息。这就有了许许多多的一些问题。
这是我们需要解决的N个问题(从简单到难)
1. 如何从服务端获取数据,传递到ActiveX控件中。
1) 初始化时使用参数绑定
2) 运行时得到数据
2. ActiveX控件得到客户端的信息,如何传递到服务端。
3. 安全性
1) 数字签名
2) 使用IOBJSAFE接口
ASP与ActiveX控件交互实战(一)
http://blog.csdn.net/online/archive/2004/08/09/68872.aspx
Kittow补充:本章实例一开始少写了增加一个名为txtinfo的文本框(TextBox)的环节,要注意。为了调试方便,建议为含有控件的html文件建立虚拟目录
ASP与ActiveX控件交互实战(二)
http://blog.csdn.net/online/archive/2004/08/09/68873.aspx
ASP与ActiveX控件交互实战(三)
http://blog.csdn.net/online/archive/2004/08/09/68874.aspx
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(141) 评论(0) 编辑
从零开始与网站开发亲密接触去年我接手第一个网站项目http://www.okooo.com开发时,并没有做网站的经验,只能试着按照以前我参与做Microsoft Office时的方法来做:
首先是打造一个便于公司内部沟通交流的内部网,其中包含“传统软件”研发需要的三个工具:文档库(存放公司各项目的文档)、CVS(保存项目的各种源代码)、BugFree(记录项目的各种缺陷);
然后,抓住“需求、开发、测试”三个环节:
要做好规划、明确需求。为什么要做这个网站、要达到什么目标?特别是需求,要详细到每个页面的每个区域放置什么内容。网站需求应该由对业务最熟悉的人来定义,他负责按照我要求的规范(详细程度)来写出每一部分需求文档,并放入文档库中。每完成一个页面定义,我就召集开发、测试人员来阅读、讨论,这样全部需求写完的时候,项目组成员对整个网站就有了一个清晰的认识。
需求明确才进入开发阶段。首先是定义数据库——有多少张表、每张表中有多少个字段。我和开发组长反复讨论,搞清楚这些表定义能否涵盖全部需求,这是最关键的一步,决定着下面编码能否顺利进行。数据库定义后,就是网站后台管理的编码实现,也就是对一张张表进行管理(增、删、改)。当后台管理完成时,项目的大部分就大功告成了。用户看到的前台页面仅仅是内容展示——把一张张表中的数据取出来按照最初的需求放置到页面的各个位置。所有的代码都用CVS管理起来。
网站测试和开发同步进行。后台管理每完成若干张表的管理,测试人员立即开始测试。这就像流水线,开发完一部分,立刻测试;同样的,网站前台展示开发时也一样需要测试人员跟进。发现的每一个Bug都用BugFree记录下来跟踪处理过程。
数据统计跟上。网站后台各个表的任何改动要准确记录,决不允许出现不知道谁修改了数据库内容的情况。其次,网友访问网站的日志要做好统计,每天结束的时候就能准确的看到当天的用户访问数据。这些数据对网站运营极其重要。
网站项目成功管理实践(上)
http://bugfree.1zsoft.com/Doc/PM1.htm
网站项目成功管理实践(下)
http://bugfree.1zsoft.com/Doc/PM2.htm
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(246) 评论(0) 编辑
日期:2006-04-04 点击:0 作者:蓝色理想 来源:蓝色理想作者:Alpar
内因类一、网站是否能满足较多用户的需求。

这里的较多不是一个绝对的量,要依情况而定。如Flickr满足人们分享、存储图像的需求,这个人群是非常大的。而Linkist满足人们建立人脉的需求,有这个需要的人群也很大。但你要说一个绝对的量,就不好估计了。总之,网站要能满足较多用户的某种(或几种)需要。而那种只针对小圈子的服务,和Web 2.0的根本要求就有些差距了,这里不涉及。
二、网站的易用性、用户体验是否够好。
一个针对广大群众的网站,其对易用性的考虑是必要的。如果你的操作流程,功能实现等设计得太过于复杂,那么,是会吓跑用户的。而好的用户体验,才是用户持续使用你的服务,并愿意为你贡献信息和资源的重要前提。所以,对于网站经营者、建设者来说,这是一个需要充分考虑的问题。而且,这也会催生UI设计师这一个新个职业的出现。
用户体验主要涉及这几个方面:
品牌内涵形象。(如google)
操作是否简便。(如del.icio.us)
功能是否够用。(如flickr)
界面是否美观。(如digg、last.fm)
速度和稳定性。(如豆瓣)
三、已有资源的质量和数量。
只有当已有资源够多够好时,才会有更多的用户愿意加入进来,因此,Web 2.0网站最初的内容建设是非常关键的,而且也是战胜对手、摆脱追兵和模仿者的重要基础。
四、网站本身是否有足够的、持续的吸引力。
只有当网站有足够的、持续的吸引力时,它的经营、发展才是稳定的、增长的。事实上,满足上面三大要素,问题就不大了。
http://www.chinahtml.com/programming/8/2006/11439310304081.shtml
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(26) 评论(0) 编辑
打造心中最完美理想的BLOG系统,特列举以下特征和功能,希望给所有BLOG程序编制者参考。如果有根据以下项目编制成功BLOG PROGRAM,别忘了通知我哦。如果还有需要补充的请多指教。BLOG的基本特征和功能要素:
1、RSS-简称“聚合”
RSS 是一种技术规范的简称,不同的技术团体将其分别描述为:“Rich Site Summary”(丰富站点摘要)、“RDF Site Summary”(RDF站点摘要)或“Really Simple Syndication”(真正简易聚合)。在形式上,也分别有RSS技术的主导者、哈佛大学研究员Dave Winer的RSS 0.93、RSS2.0(Apple、News.com的出版商CNET Networks等支持),IBM软件工程师SamRuby 2003年发起的Atom(Google和Six Apart――Movable Type的拥有着支持)。不过本质上它们都是一种遵循W3C RDF规范的XML格式,是一种多用途、可扩展的元数据描述及联合推广格式。它允许互联网站点制作人员,为内容整合客户端提供选择性的、汇总过的Web内容。
RSS2.0规范原文
2、Trackback-引用通告
TrackBack最早是Movable上的功能,后来成为BLOG的标准配置,它是一种将全世界无数个Blog连接起来的功能。通过TrackBack,你可以在自己的Blog上就别人发表的某篇文章做评论和延伸,并通知对方你引用了它文章中的内容。只要对方的Blog也支持TrackBack,你在发布自己的文章时,将同时向对方Blog发出一个TrackBack Ping,向刊载被评论文章的服务器发送你写的Blog的地址、标题和部分征文。这样当其他人浏览那篇文章时,就能够看到你的部分评论和正文,感兴趣的话他们还可以通过链接阅读你评论的详细内容。同样,别人也可以使用TrackBack功能对你Blog中的某篇文章加以评论,在你的文章中留下相应的引申链接
3、Permailink-永久链接
给BLOG上每篇BLOG文章一个永久链接,这样便于他人长期引用,这样不管你的后台是动态程序,首页如何改变,但每篇BLOG的链接都是永久固定的,而且最好是htm等静态链接,这样还有利于搜索引擎的搜录。如果你实在做不到htm 静态链接,可以考虑采取URL REWRITING、PATH_INFO、服务器设置等方式将动态链接变为静态链接,将前台链接表现形式和后台程序分离开来,以后即使更换后台程序也不用担心了。
4、Comments-评论
也称作回复功能,用户可以借此对此BLOG进行评论,这是读者同BLOGGER相互交流的最直接渠道。
5、Archive-归档
也称作索引功能,通常都是按月份进行BLOG文件的归档(也有按分类归档的),便于大家在一个页面就查找到归档日期内的所有BLOG文章,通常都生成静态页面,这也是利于搜索引擎搜录的一个重要手段。
6、Calendar-日历
每个BLOG都可以看到的最基本的元素,这也是BLOG最基本的特征,根据日期可以检索到当日发表的BLOG。
以上是BLOG最基本的功能要素,如果以上6点都达不到,称为BLOG就有些牵强了。话虽如此,目前大部分都只支持了其中四、五项,这是BLOG程序设计者需要学习和改进的。
http://www.chinahtml.com/programming/8/2006/11439310304081.shtml
posted @ 2006-04-21 09:22 kittow╃天笑╃ 阅读(60) 评论(0) 编辑
