摘要:为了延长UPS的使用寿命,UPS不宜长期处于满载状态下运行。后备式UPS一般选取额定功率的60%--70%的负载量,在线式UPS一般选取额定功率的70%--80%的负载量。为了延长蓄电池的使用寿命,UPS也不宜长期处于过度轻载状态下运行。
目录
     为了延长UPS的使用寿命,UPS不宜长期处于满载状态下运行。后备式UPS一般选取额定功率的60%--70%的负载量,在线式UPS一般选取额定功率的70%--80%的负载量。为了延长蓄电池的使用寿命,UPS也不宜长期处于过度轻载状态下运行。

假设要为额定功率为500VA,功率因数为0.9的负载配置UPS,根据假设的负载参数计算如下:

500VA/0.8=625VA(UPS驱动功率因数为-0.9的负载时,其驱动能力为额定功率的80%)

625VA/0.7=892.86VA(后备式UPS一般选取它额定功率的60%--70%的负载量)

625VA/0.8=781.25VA(在线式UPS一般选取它额定功率的70%--80%的负载量)

从计算结果来看,驱动额定功率为500VA,功率因数为0.9的负载时,若选用在线式UPS可选780VA以上的,若后备式UPS可选892VA以上的。

UPS的容量选择应考虑以下几个因素。

1. 实际负载情况

P=∑Pi/k (5-3)

即实际所有负载的总和,再加上一定的裕量。k为裕量系数,一般取1.1--1.3。

2)预留扩容:考虑到容IC交易网量发展的可能,在将来不追加设备和场地投资的前提下,增加运行设备

P=P*k (5-4)

式中k-----裕量系数,用户可根据实际情况掌握在1.1--1.3之间。

将UPS的负载功率因数当成了输出有功功率的百分比;实际上UPS约有功功率、无功功率和视在功率是直角三角形的勾股弦关系。比如UPS的负载功率因数PF=0.8时,视在功率S为lkVA的UPS可输出有功功率为

P=S*PF=800W

无功功率为

Q=S*√1-PF2=1*0.6=600var

而不是200var的无功功率。而且在双变换UPS正常工作时,带功率因数PF=l的线性负载时,逆变器只能给出80%的有功功率,而不是100。这是由逆变器的固有特性所决定的。

用非线性负载的视在功率相加值作标准去选功率因数不匹配的UPS,看起来似乎很有道理,但若功率因数没选对就有问题了。UPS带非线性负载的能力主要取决于它的无功功率。无功功率大,应付非线性负载的能力就强。因此,应当用无功功率作标准去选择UPS。

posted @ 2012-02-23 19:23 icbj.cn Views(8) Comments(0) Edit

在查询分析器以“文本显示结果”方法执行
exec UspOutputData 你的表名
得到导出数据的语句,但image,text,ntext,sql_variant 列不出现在语句,以后改进。

存储过程UspOutputData如下:

CREATE    PROCEDURE dbo.UspOutputData
@tablename sysname
AS
declare @column varchar(1000)
declare @columndata varchar(1000)
declare @sql varchar(4000)
declare @xtype tinyint
declare @name sysname
declare @objectId int
declare @objectname sysname
declare @ident int

set nocount on
set @objectId=object_id(@tablename)

if @objectId is null -- 判斷對象是否存在
begin
print 'The object not exists' pdf
return
end
set   @objectname=rtrim(object_name(@objectId))

if   @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
begin
print 'object not in current database'
return
end

if OBJECTPROPERTY(@objectId,'IsTable') <> 1 -- 判斷對象是否是pdftable
begin
print 'The object is not table'
return
end

select @ident=status&0x80   from syscolumns where id=@objectid and status&0x80=0x80

if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' ON'

declare syscolumns_cursor cursor
for select c.name,c.xtype from syscolumns c
where c.id=@objectid
order by c.colid
open syscolumns_cursor
set @column=''
set @columndata=''
fetch next from syscolumns_cursor into @name,@xtype
while @@fetch_status <>-1
begin
if @@fetch_status<>-2
begin
if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理
begin
set @column=@column+case when len(@column)=0 then'' else ','end+@name
set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','','end
+case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char
when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar
when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime
when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime
when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier
else @name end
end
end  
fetch next from syscolumns_cursor into @name,@xtype
end
close syscolumns_cursor
deallocate syscolumns_cursor

set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename

print '--'+@sql
exec(@sql)

if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' OFF'

GO

posted @ 2011-07-29 21:45 icbj.cn Views(84) Comments(0) Edit

Sql Server 中 text或ntext 字段内容替换方法总结


update 表名

    set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值')
1.update ntext:
(1)varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace。
update 表名
   set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值')

update 表名
    set ntext类型字段名=replace(convert(nvarchar(4000),ntext类型字段名),'要替换的字符','替换成的值')

(2)如果text/ntext超过8000/4000,看如下例子
declare @pos int
    declare @len int
    declare @str nvarchar(4000)
    declare @des nvarchar(4000)
    declare @count int
   set @des ='<requested_amount+1>'--要替换成的值
   set @len=len(@des)
   set @str= '<requested_amount>'--要替换的字符
   set @count=0--统计次数.
    WHILE 1=1
   BEGIN
       select @pos=patINDEX('%'+@des+'%',propxmldata) - 1
       from 表名
       where 条件
      IF @pos>=0
      begin
           DECLARE @ptrval binary(16)
          SELECT @ptrval = TEXTPTR(字段名)
          from 表名
          where 条件
          UPDATETEXT 表名.字段名 @ptrval @pos @len @str
          set @count=@count+1
      end
      ELSE
         break;
   END
   select @count

2.alter column语句有局限性,比如不允许修改text、image、ntext 或 timestamp 列.
以下提供一个修改ntext列的例子:
    Alter Table tbl Add newcol ntext null
     go
     update tbl set newcol=col
     go
     EXEC sp_rename 'tbl.col', 'oldcol', 'COLUMN'
     go
     EXEC sp_rename 'tbl.newcol', 'col', 'COLUMN'
     go
     alter table tbl drop column oldcol
     go
以上通过新增一列替换旧的列方法实现了将一个不允许为空的ntext修改为允许为空的ntext列(注意:以上的go不能缺少).修改表结构之后,由于视图所依赖的基础对象的更改,视图的持久元数据会过期,需要刷新视图,通过sp_refreshview (可以通过pdfsp_depends 找处相关的视图,再通过sp_refreshview逐个刷新).
另外可以也可以通过一下存储过程进行刷新所有视图:
PRINT 'Refreshing all views...'
    DECLARE @vName sysname
    DECLARE refresh_cursor CURSOR FOR
    SELECT Name from sysobjects WHERE xtype = 'V'
    order by crdate
    FOR READ ONLY
    OPEN refresh_cursor
    FETCH NEXT FROM refresh_cursor
   INTO @vName
     WHILE @@FETCH_STATUS <> -1
    BEGIN
         exec sp_refreshview @vName
        PRINT '视图' + @vName + ' refreshed'
        FETCH NEXT FROM refresh_cursor
       INTO @vName
    END
    CLOSE refresh_cursor
    DEALLOCATE refresh_cursor

posted @ 2011-07-29 21:44 icbj.cn Views(70) Comments(0) Edit

方法一(推荐):
update tablename set fieldA=replace(cast(fieldA as varchar(8000)) ,'aa','bb')这样的语句。
SQL中replace替换ntext,text字段部分内容使用说明:replace(cast(fieldA as varchar(8000)) ,'aa','bb')

方法二:
支持text字段处理的仅有:下面的函数和语句可以与 ntext、text 或 image 数据一起使用。
函数 语句
DATALENGTH READTEXT
PATINDEX SET TEXTSIZE
SUBSTRING UPDATETEXT
TEXTPTR WRITETEXT
TEXTVALID

主题:text字段
1:替换

--创建数据测试环境
create table #tb(aa text)
insert into #tb select 'abc123abc123,asd'

--定义替换的字符串
declare @s_str varchar(8000),@d_str varchar(8000)
select @s_str='123' --要替换的字符串和芯
,@d_str='000'--替换成的字符串

--字符串替换处理
declare @p varbinary(16),@postion int,@rplen int
select @p=textptr(aa),@rplen=len(@s_str),@postion=charindex(@s_str,aa)-1 from #tb
while @postion>0
begin
updatetext #tb.aa @p @postion @rplen @d_str
select @postion=charindex(@s_str,aa)-1 from #tb
end

posted @ 2011-07-29 21:41 icbj.cn Views(124) Comments(0) Edit
关键字:DNS 分布式数据库
DNS(Domain Name System,域名系统)是一种组织成层次结构的分布式数据库,里面包含有从DNS域名到各种数据类型(如IP地址)的映射
  DNS(Domain Name System,域名系统)是一种组织成层次结构的分布式数据库,里面包含有从DNS域名到各种数据类型(如IP地址)的映射。这通常需要建立一种A(Address)记录,意为“主机记录”或“主机地址记录”,是所有DNS记录中最常见的一种。通过DNS,用户可以使用友好的名称查找计算机和服务在网络上的位置。DNS名称分为多个部分,各部分之间用点分隔。最左边的是主机名,其余部分是该主机所属的DNS域。因此一个DNS名称应该表示为“主机名+DNS域”的形式。
  要想成功部署DNS服务,运行Windows Serve 2003的计算机中必须拥有一个静态IP地址,只有这样才能让DNS客户端定位DNS服务器。另外如果希望该DNS服务器能够解析Internet上的域名,还需保证该DNS服务器能正常连接至Internet。
  .安装DNS服务器
  默认情况下Windows Server 2003系统中没有安装DNS服务器,所做的第一件工作就是安装DNS服务器。
   第1步,依次单击“开始/管理工具/配置您的服务器向导”,在打开的向导页中依次单击“下一步”按钮。配置向导自动检测所有网络连接的设置情况,若没有发现问题则进入“服务器角色”向导页。
    如果是第一次使用配置向导,则还会出现一个“配置选项”向导页,点选“自定义配置”单选框即可。
   第2步,在“服务器角色”列表中单击“DNS服务器”选项,并单击“下一步”按钮。打开“选择总结”向导页,如果列表中出现“安装DNS服务器”和“运行配置 DNS 服务器向导来配置DNS”,则直接单击“下一步”按钮。否则单击“上一步”按钮重新配置(如图1)。

 

图1 选择“DNS服务器”角色
 第3步,向导开始安装DNS服务器,并且可能会提示插入Windows Server 2003的安装光盘或指定安装源文件(如图2)。

 

    图2 指定系统安装盘或安装源文件
  如果该服务器当前配置为自动获取IP地址,则“Windows 组件向导”的“正在配置组件”页面就会出现,提示用户使用静态IP地址配置DNS服务器。
  二.创建区域
   DNS服务器安装完成以后会自动打开“配置DNS服务器向导”对话框。用户可以在该向导的指引下创建区域。
  第1步,在“配置DNS服务器向导”的欢迎页面中单击“下一步”按钮,打开“选择配置操作”向导页。在默认情况下适合小型网络使用的“创建正向查找区域”单选框处于选中状态。而所管理的网络就不太大,因此保持默认选项并单击“下一步”按钮(如图3)。

 

图3 选择配置操作
第2步,打开“主服务器位置”向导页,如果所部署的DNS服务器是网络中的第一台DNS服务器,则应该保持“这台服务器维护该区域”单选框的选中状态,将该DNS服务器作为主DNS服务器使用,并单击“下一步”按钮(如图4)。

 

 
 第3步,打开“区域名称”向导页,在“区域名称”编辑框中键入一个能反映信息的区域名称(如“hn.com”),单击“下一步”按钮(如图5)。
 第4步,在打开的“区域文件”向导页中已经根据区域名称默认填入了一个文件名。该文件是一个ASCII文本文件,里面保存着该区域的信息,默认情况下保存在“windowssystem32dns”文件夹中。保持默认值不变,单击“下一步”按钮(如图6)。

 

 第5步,在打开的“动态更新”向导页中指定该DNS区域能够接受的注册信息更新类型。允许动态更新可以让系统自动地在DNS中注册有关信息,在实际应用中比较有用,因此点选“允许非安全和安全动态更新”单选框,单击“下一步”按钮(如图7)。

 

 第6步,打开“转发器”向导页,保持“是,应当将查询转送到有下列IP地址的DNS服务器上”单选框的选中状态。在IP地址编辑框中键入ISP(或上级DNS服务器)提供的DNS服务器IP地址,单击“下一步”按钮(如图8)。

 

小提示:通过配置“转发器”可以使内部用户在访问Internet上的站点时使用当地的ISP提供的DNS服务器进行域名解析。
  第7步,依次单击“完成/完成”按钮结束“hn.com”区域的创建过程和DNS服务器的安装配置过程。
   .创建域名
  利用向导成功创建了“hn.com”区域,可是内部用户还不能使用这个名称来访问内部站点,因为它还不是一个合格的域名。接着还需要在其基础上创建指向不同主机的域名才能提供域名解析服务。准备创建一个用以访问Web站点的域名如和芯“www. hn.com”。具体操作步骤如下:
  第1步,依次单击“开始”→“管理工具”→“DNS”菜单命令,打开“dnsmagt”控制台窗口。
  第2步,在左窗格中依次展开“ServerName”→“正向查找区域”目录。然后用鼠标右键单击“hn.com”区域,执行快捷菜单中的“新建主机”命令(如图9)。
   

 

图9 执行“新建主机”命令
  第3步,打开“新建主机”对话框,在“名称”编辑框中键入一个能代表该主机所提供服务的名称(本例键入“www”)。在“IP地址”编辑框中键入该主机的IP地址(如“192.168.0.198”),单击“添加主机”按钮。很快就会提示已经成功创建了主机记录(如图10)。
   

 

图10 创建主机记录
  最后单击“完成”按钮结束创建。
  四.设置DNS客户端
   尽管DNS服务器已经创建成供,并且创建了合适的域名,可是如果在客户机的浏览器中却无法使用“www. hn.com”这样的域名访问网站。这是因为虽然已经有了DNS服务器,但客户机并不知道DNS服务器在哪里,因此不能识别用户输入的域名。用户必须手动设置DNS服务器的IP地址才行。在客户机“Internet协议(TCP/IP)属性”对话框中的“首选DMS服务器”编辑框中设置刚刚部署的DNS服务器的IP地址(本例为“192.168.0.1”,如图11)。

 

  
图11 设置客户端DNS服务器地址
然后再次使用域名访问网站,就可以正常访问了。
总之,在一个TCP/IP架构的网络(例如Internet)环境中,DNS是一个非常重要而且常用的系统。主要的功能就是将人易于记忆的Domain Name与人不容易记忆的IP Address作转换。而上面执行DNS服务的这台网络主机,就可以称之为DNS Server。基本上,通常我们都认为DNS只是将Domain Name转换成IP Address,然后再使用所查到的IP Address去连接(俗称“正向解析”)。事实上,将IP Address转换成Domain Name的功能也是相当常使用到的,当login到一台Unix工作站时,工作站就会去做反查,找出你是从哪个地方连线进来的(俗称“逆向解析”)。
posted @ 2011-07-26 21:14 icbj.cn Views(156) Comments(1) Edit
1. PowerPoint 不是字处理软件
 
  制作PowerPoint幻灯片并不是要在一张幻灯片上塞进尽可能多的内容。幻灯片是为了在听众记忆里留下印象,引发人思考的。这意味着你甚至不用在上面写完整的句子,简单的描述就很好了。
 
  2.避免逐字逐句读幻灯片
 
  把PowerPoint当作字处理软件的一个必然后果就是太多的演讲者站在那里,读幻灯片上的内容。这就产生了一个误区:演讲者忘记了他们的听众绝大部分是有文化的,完全可以自己阅读。如果你想要为人们朗读,那么就去参加本地图书馆举办的读书活动吧。陈述的目的是为了向听众解释那些他们不能够从幻灯片中了解的内容。如果不是这样,他们完全可以把你的幻灯片带回去,在他们自己的办公室、家里、船上、甚至盥洗室里舒舒服服地阅读。
 
  3.图片比文字表达效果更好
 
  仅仅因为PowerPoint有很多页的文字,并不能成为使用它们的理由。一张满页文字的幻灯片所含的信息量很难与一张仅有一幅图片的幻灯片相比。在幻灯片上放一张图片而不是一页的文字,然后讲解这张图片,人们会发现这样会有趣的多,而且信息也更丰富。
 
  这样也让人们认为去听你的演讲更有价值,而不是仅仅下载幻灯片,这让你有更多的发挥机会。
 
  4.充分了解你的演讲稿
 
  诸如“哦!这个幻灯片放在这里干吗”或者“我真不知道这个幻灯片想表达什么”之类的评论对于演讲稿来说都不是一件好事。总的来说,一位听众花了时间和精力来听你的演讲,起码希望你能够花同样的时间和精力来准备这次演讲。拿别人的演讲稿,然后直接站到演讲台上,开始读幻灯片上的内容并不是一种好的工作方式。
 
  5.板书并不好,精彩的故事才吸引人
 
  并没有法律规定你讲的内容必须按照板书的方式展现出来。事实上,就算在学校,采用板书的方式讲课对于学生来说也并不有趣。绝大部分时候,这些课程的老师是把课程里的内容同真实生活结合起来,向学生讲述一个故事来证明一个观点。你想听什么呢?
 
  是愿意听关于疏忽的四个法律案件的引证?还是更愿意听一个关于某人疏忽的故事,由于他的疏忽,竟然被人起诉。
 
  6.陈述的内容比幻灯片模板的选择重要得多
 
  每年我平均要在会议上做80次演讲,出于某些原因考虑,每一个会议都喜欢用自己独特的幻灯片模板。根据你需要做的演讲类型以及你在幻灯片里的做处理不同,修改模板需要花15分钟到2 个小时。而这2 个小时本来可以用在其他更有意义的工作上,比如可以添加些该会议听众关心的内容,而不是把时间花在修改模板之类听众根本不关心的问题上。
 
  7.善用三分屏的界面
 
  PowerPoint在制作和芯的三分屏界面对于编写幻灯片来说非常有用,但是它的作用并不能够替代你自己的排练,三分屏界面的作用并不是让你在演讲的时候知道下一张幻灯片的内容。
 
  按F5键,然后按照设计的方式使用PowerPoint. 如果你已经在使用三分屏的模式,按“Shift ”+ “F5”键,就能够从当前的幻灯片开始进行播放。
 
  8.选择合适的色彩
 
  陈述的主要目标是传播知识,如果你用白底黑字的幻灯片,这在光线暗淡的房间里看起来格外让人痛苦,你就很难将任何观点传递给听众,因为他们在整个演讲过程中,一直试图把目光从屏幕上逃开,望向其他地方。
 
  9.照顾听众中的残障人士
 
  绝大部分残障人士都不会参加演讲陈述,但是有些残障人士还是会参加。
 
  例如,如果在蓝色的背景上使用红色的字体对于某些有色盲的人士来说就看不见内容了,因为在他们看来屏幕会不停地动,红色的内容在黑色的背景上也会遇到一样的问题。
 
  在他们的眼中,红色的内容在绿色的背景中甚至会消失不见,除非是完全红屏的情况,在这种情况下,红色的内容会突然变大。
 
  10. 选择适合的字号
 
  12号字体除非你贴屏幕特别近才能够看得清,如果是这样的话,你头部的运动似乎就太大了。14号字体应该是最低要求。理想状况下,不要使用小于18号的字体。不过,这并不是一场比比看谁用的字体更大的比赛。如果你仅仅在一张幻灯片中使用了12号字,也没必要太紧张。一两张带有小字体的幻灯片反而会让你的演讲稿看起来更具有阅读性。
 
posted @ 2011-07-26 21:13 icbj.cn Views(11) Comments(0) Edit

32 位的操作系统只能用 4G 的内存(不确定这句话是否正确),因为 2 32 次方是 4G 。默认的情况下,操作系统给自己留了 2G ,剩下的 2G 给应用程序。所以,每个应用程序所能使用的内存,最大不超过 2G 。据说可以改 WINDOWS BOOT.INI ,强制操作系统只使用 1G ,即使这样,应用程序也至多是 3G

SQL SERVER 就是这么个倒霉的应用程序。

就拿我们服务器来讲, OS windows 2003; 内存: 8G; SQL:2008 。结果内存只用了不到 2G ,其中 SQL 1.7  G ,并且这个值基本没有什么变化。

太浪费了。

十月革命一声炮响,微软送来了 AWE 。这个东西可以让 32 位操作系统下的应用程序使用更多的内存。 SQL 支持 AWE

步骤:

1、 进入 SQL SERVER Management Studio

2、 右击数据库实例,选内存

3、 勾上“使用 AWE 分配内存”,填上合适的最小和最大内存(具体是什么标准不清楚,我是给操作系统预留了 2G; 有的内存紧张的服务器只留 1G, 甚至只有 500M ,也没发现什么问题)

4、 重启和芯数据库实例。

之后用任务管理器查看,内存消耗越来越多,直至比设定值大一点点。很奇怪,这时看 SQL 消耗的内存,只有几十 M ,不知道这个数值怎么来的。估计是分配的内存之外消耗的吧?

在性能监视器(管理工具 - 性能)上看到,磁盘队列大大减少了,实际应用,网站快了许多。

 

设置服务器支持使用2G以上内存以及多核CPU充分使用 回复和芯
问题:

1、通常 Windows Server 服务器默认的设置不支持使用 2G 以上的内存,即使硬件的内存有超过2G,但是实际使用的时候也不会用到2G

2、多核CPU处理单个程序时,很多时候只是其中一个核CPU有在使用,其他都没有发挥作用

为了充分使用服务器内存和买卖IC网CPU的效率,需要做设置:

第一步:修改 windwos 启动配置文件: c:\boot.ini

增加如下红色文字部分设置

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional" execute=optin /fastdetect /PAE /AWE



第二步:SQL Server 2005 管理器(SQL Server Management Studio Express),选择服务器鼠标右键属性,选择“内存”页,勾选“使用AWE分配内存”



第三步:我的电脑,鼠标右键:系统属性——高级——设置——高级

处理器计划:勾选“程序”

内存使用:勾选“程序”



第四步:重启服务器
 

posted @ 2011-07-26 21:12 icbj.cn Views(158) Comments(0) Edit

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Linq;

namespace DirectoryApp
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("***** Fun with Directory(Info) *****\n");
      ShowWindowsDirectoryInfo();
      Console.ReadLine();

      DisplayImageFiles();
      Console.ReadLine();

      ModifyAppDirectory();
      Console.ReadLine();

      FunWithDirectoryType();
      Console.ReadLine();
    }

    #region Show basic directory info
    static void ShowWindowsDirectoryInfo()
    {
      DirectoryInfo dir = new DirectoryInfo(@"C:\Windows");

      // Dump directory information.
      Console.WriteLine("***** Directory Info *****");
      Console.WriteLine("FullName: {0}", dir.FullName);
      Console.WriteLine("Name: {0}", dir.Name);
      Console.WriteLine("Parent: {0}", dir.Parent);
      Console.WriteLine("Creation: {0}", dir.CreationTime);
      Console.WriteLine("Attributes: {0}", dir.Attributes);
      Console.WriteLine("Root: {0}", dir.Root);
      Console.WriteLine("**************************\n");
    }
    #endregion

    #region Show info on image typesIC
    static void DisplayImageFiles()
    {
      DirectoryInfo dir = new DirectoryInfo(@"C:\Windows\Web\Wallpaper");

      // Get all files with a *.bmp extension.
      FileInfo[] imageFiles = dir.GetFiles("*.jpg");

      // How many were found?
      Console.WriteLine("Found {0} *.jpg files\n", imageFiles.Length);

      // Now print out info for each file.
      foreach (FileInfo f in imageFiles)
      {
        Console.WriteLine("***************************");
        Console.WriteLine("File name: {0}", f.Name);
        Console.WriteLine("File size: {0}", f.Length);
        Console.WriteLine("Creation: {0}", f.CreationTime);
        Console.WriteLine("Attributes: {0}", f.Attributes);
        Console.WriteLine("***************************\n");
      }
    }
    #endregion

    #region Modify directory structure
    static void ModifyAppDirectory()
    {
      DirectoryInfo dir = new DirectoryInfo(".");

      // Create \MyFolder off initial directory.
      dir.CreateSubdirectory("MyFolder");

      // Capture returned DirectoryInfo object.
      DirectoryInfo myDataFolder = dir.CreateSubdirectory(@"MyFolder2\Data");

      // Prints path to ..\MyFolder2\Data.
      Console.WriteLine("New Folder is: {0}", myDataFolder);
    }
    #endregion

    #region Using Directory type
    static void FunWithDirectoryType()
    {
      // List all drives on current computer.
      string[] drives = Directory.GetLogicalDrives();
      Console.WriteLine("Here are your drives:");
      foreach (string s in drives)
        Console.WriteLine("--> {0} ", s);

      // Delete what was created.
      Console.WriteLine("Press Enter to delete directories");
      Console.ReadLine();
      try
      {
        Directory.Delete(string.Format(@"{0}\MyFolder", IC
          Environment.CurrentDirectory));

        // The second parameter specifies if you
        // wish to destroy any subdirectories.
        Directory.Delete(string.Format(@"{0}\MyFolder2",
          Environment.CurrentDirectory), true);
      }
      catch (IOException e)
      {
        Console.WriteLine(e.Message);
      }
    }
    #endregion
  }
}

posted @ 2011-07-23 13:17 icbj.cn Views(50) Comments(0) Edit

Dictionary<string, string>是一个泛型 

他本身有集合的功能有时候可以把它看成数组 

他的结构是这样的:Dictionary<[key], [value]> 

他的特点是存入对象是需要与[key]值一一对应的存入该泛型 

通过某一个一定的[key]去找到对应的值 

举个例子: 

//实例化对象 

Dictionary<int, string> dic = new Dictionary<int, string>(); 

//对象打点添加 

dic.Add(1, "one"); 

dic.Add(2, "two"); 

dic.Add(3, "one"); 

//提取元素的方法 

string a = dic[1]; 

string b = dic[2]; 

string c = dic[3]; 

//1、2、3是键,分别对应“one”“two”“one” 

//上面代码中分别把值赋给了a,b,c 

//注意,键相当于找到对应值的唯一标识,所以不能重复 

//但是值可以重复 

如果你还看不懂我最后给你举一个通俗的例子 

有一缸米,你想在在每一粒上都刻上标记,不重复,相当于“键”当你找的时候一一对应不会找错,这就是这个泛型的键的-作用,而米可以一样,我的意思 你明白了吧?

-------------------------------------------------------------------------

c# 对dictionary类进行排序用什么接口实现

如果使用.Net Framework 3.5的话,事情就很简单了。呵呵。 

如果不是的话,还是自己写排序吧。 

using System; 

using System.Collections.Generic; 

using System.Text; 

using System.Linq; 

namespace DictionarySorting 

class Program 

static void Main(string[] args) 

Dictionary<int, string> dic = new Dictionary<int, string>(); 

dic.Add(1, "HaHa"); 

dic.Add(5, "HoHo"); 

dic.Add(3, "HeHe"); 

dic.Add(2, "HiHi"); 

dic.Add(4, "HuHu"); 

var result = from pair in dic orderby pair.Key select pair; 

foreach (KeyValuePair<int, string> pair in result) 

Console.WriteLine("Key:{0}, Value:{1}", pair.Key, pair.Value); 

Console.ReadKey(); 

【执行结果】 

Key:1, Value:HaHa 

Key:2, Value:HiHi 

Key:3, Value:HeHe 

Key:4, Value:HuHu 

Key:5, Value:HoHo

Dictionary的基本用法。假如

需求:现在要导入买卖IC网一批数据,这些数据中有一个称为公司的字段是我们数据库里已经存在了的,目前我们需要把每个公司名字转为ID后才存入数据库。

分析:每导一笔记录的时候,就把要把公司的名字转为公司的ID,这个不应该每次都查询一下数据库的,因为这太耗数据库的性能了。

解决方案:在业务层里先把所有的公司名称及相应的公司ID一次性读取出来,然后存放到一个Key和Value的键值对里,然后实现只要把一个公司的 名字传进去,就可以得到此公司相应的公司ID,就像查买卖IC网字典一样。对,我们可以使用字典Dictionary操作这些数据。

示例:SetKeyValue()方法相应于从数据库里读取到了公司信息。

/// <summary>
/// 定义Key为string类型,Value为int类型的一个Dictionary
/// </summary>
/// <returns></returns>
protected Dictionary<string, int> SetKeyValue()
{
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("公司1", 1);
dic.Add("公司2", 2);
dic.Add("公司3", 3);
dic.Add("公司4", 4);
return dic;
}


/// <summary>
/// 得到根据指定的Key行到Value
/// </summary>
protected void GetKeyValue()
{
Dictionary<string, int> myDictionary = SetKeyValue();
//测试得到公司2的值
int directorValue = myDictionary["公司2"];
Response.Write("公司2的value是:" + directorValue.ToString());
}

posted @ 2011-07-23 13:15 icbj.cn Views(68) Comments(0) Edit

以前在使用VB来实现多线程的 时候,发现有一定的难度。虽然也有这样那样的方法,但都不尽人意,但在C#中,要编写多线程应用程序却相当的简单。这篇文章将作简要的介绍,以起到抛砖引 玉的作用!
      .NET将关于多线程的功能定义在System.Threading名字空间中。因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;)。
      即使你没有编写多线程应用程序的经验,也可能听说过“启动线程”“杀死线程”这些词,其实除了这两个外,涉及多线程方面的还有诸如“暂停线程”“优先级” “挂起线程”“恢复线程”等等。下面将一个一个的解释。
      a.启动线程

    顾名思义,“启动线程”就是新建并启动一个线程的意思,如下代码可实现:
    Thread thread1 = new Thread(new
ThreadStart( Count));
    其中的 Count 是将要被新线程执行的函数。
    
b.杀死线程
    “杀死线程”就是将一线程斩草除根,为了不白费力气,在杀死一个线程前最好先判断它是否还活着(通过 IsAlive 属性),然后就可以调用 Abort 方法来杀死此线程。
    c.暂停线程

    它的意思就是让一个正在运行的线程休眠一段时间。如 thread.Sleep(1000); 就是让线程休眠1秒钟。
    d.优先级

    这个用不着解释了。Thread类中有一个ThreadPriority属性,它用来设置优先级,但不能保证操作系统会接受该优先级。一个线程的优先级可 分为5种:Normal, AboveNormal, BelowNormal, Highest, Lowest。具体实现例子如下:
    thread.Priority = ThreadPriority.Highest;
    
e.挂起线程
    Thread类的Suspend方法用来挂起线程,知道调用Resume,此线程才可以继续执行。如果线程已经挂起,那就不会起作用。
    if
(thread.ThreadState = ThreadState.Running)
    {
         thread.Suspend();
    }
    
f. 恢复线程
    用来恢复已经挂起的线程,以让它继续执行,如果线程没挂起,也不会起作用。
    if
(thread.ThreadState = ThreadState.Suspended)
    {
         thread.Resume();
    }
    下面将列出一个买卖IC网例子,以说明简单的线程处理功能。此例子来自于帮助文档。
    using System;
    using System.Threading;

    // Simple threading scenario: Start a static method running
    // on a second thread.
    public class ThreadExample {
        // The ThreadProc method is called when the thread starts.
        // It loops ten times, writing to the console and yielding
        // the rest of its time slice each time, and then ends.
        public static void ThreadProc() {
            for (int i = 0; i < 10; i++) {
                Console.WriteLine("ThreadProc: {0}", i);
                // Yield the rest of the time slice.
                Thread.Sleep(0);
            }
        }
    
        public static void Main() {
            Console.WriteLine("Main thread: Start a second thread.");
            // The constructor for the Thread class requires a ThreadStart
            // delegate that represents the method to be executed on the
            // thread. C# simplifies the creation of this delegate.
            Thread t = new Thread(new ThreadStart(ThreadProc));
            // Start ThreadProc. On a uniprocessor, the thread does not get
            // any processor time until the main thread yields. Uncomment
            // the Thread.Sleep that follows t.Start() to see the difference.
            t.Start();
            //Thread.Sleep(0);
    
            for (int i = 0; i < 4; i++) {
                Console.WriteLine("Main thread: Do some work.");
                Thread.Sleep(0);
            }
    
            Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
            t.Join();
            Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
            Console.ReadLine();
        }
    }
    
       此代码产生的输出类似如下买卖IC网内容:

     Main thread: Start a second thread.     Main thread: Do some work.     ThreadProc: 0     Main thread: Do some work.     ThreadProc: 1     Main thread: Do some work.     ThreadProc: 2     Main thread: Do some work.     ThreadProc: 3     Main thread: Call Join(), to wait until ThreadProc ends.     ThreadProc: 4     ThreadProc: 5     ThreadProc: 6     ThreadProc: 7     ThreadProc: 8     ThreadProc: 9     Main thread: ThreadProc.Join has returned.  Press Enter to end program.
posted @ 2011-07-23 13:14 icbj.cn Views(89) Comments(0) Edit