CMS2.0开发进行时之二--StringBuilder类
作者:大石头  来源:  发布时间:2007-1-16 22:16:36  共有534位读者阅读过此文
    用过Net开发的人都知道,大量字符串合并,一般使用StringBuilder,性能可大大提高。
    在CMS2.0的开发过程中,特别是模版处理的时候,几乎全部都是字符串串联操作,为了提高性能,以及优化程序结构,特编写了一个ASP的StringBuilder类,源码如下:
以下是代码片段:
<%
'*******************************************************************
' 程序名:字符串Builder类
' 工程名:通用类
' 文件名:Class_StringBuilder.asp
' 版  本:V1.0
' 作  者:大石头(99363590)
' 组  织:新生命(NewLife)(QQ群:8088565)
' 更新日期:2006-12-26 0:40:52
'*******************************************************************
%>
<%
Class NewLife_Class_StringBuilder
 Public Ver, ClassName '类版本,名称
 Public Name '视图名字,用来唯一定位网格
 Public Arr() '字符串数组
 Public Delimiter '分隔符
 Private m_MaxLength '最大长度
 Private m_Count  '实际数组元素个数
 
 '类初始化
 Private Sub Class_Initialize()
  Ver = "1.0"
  ClassName = "NewLife_Class_StringBuilder"
  
  m_MaxLength = 0
  m_Count = 0
  Delimiter = ""
 End Sub
 
 '重新分配大小
 Public Sub ReSize()
  ReDim Preserve Arr(m_MaxLength-1)
 End Sub
 
 Public Property Get MaxLength()
  MaxLength = m_MaxLength
 End Property
 
 Public Property Let MaxLength(vMaxLength)
  m_MaxLength = vMaxLength
  ReSize() '设定最大长度后,重新分配大小
 End Property
 
 Public Property Get Count()
  Count = m_Count
 End Property
 
 '插入文本
 Public Function Append(str)
  If TypeName(str)="Variant()" Then '插入的可能是一个字符串数组
   If Length + UBound(str) - LBound(str) + 1 > MaxLength Then
    '空间不够,则一次分配足够,且多分配100个单元
    MaxLength = MaxLength * 2 + UBound(str) - LBound(str) + 1
   End If
   Dim i
   For i=LBound(str) To UBound(str)
    Arr(m_Count) = str(i)
    m_Count = m_Count + 1
   Next
  ElseIf TypeName(str)=ClassName Then '插入的可能也是一个StringBuilder对象
   If m_Count + str.Count > MaxLength Then
    '空间不够,则一次分配足够,且多分配100个单元
    MaxLength = MaxLength * 2 + str.Count
   End If
   Dim j
   For j=1 To str.Count
    Arr(m_Count) = str.Arr(i)
    m_Count = m_Count + 1
   Next
  Else
   If m_Count + 1 > MaxLength Then
    '空间不够,则一次分配足够,且多分配100个单元
    If MaxLength=0 Then '防止有些人网址设定MaxLength,默认指向100
     MaxLength = 500
    Else
     MaxLength = MaxLength * 2
    End If
   End If
   Arr(m_Count) = str
   m_Count = m_Count + 1
  End If
 End Function
 
 '导出
 Public Function ToString()
  '压缩,把数组设置为实际大小,以防下面Join的时候产生空格
  If MaxLength<>Count Then MaxLength = Count 
  ToString = Join(Arr, Delimiter)
 End Function
End Class
%>

转载必须指明出自本站!!

最后,CMS2.0的开发,同时也是Gen3.0的开发,需要更多人的支持……

新生命 XCMS1.0 Build0206 版权所有 All Copyrights @2009 桂ICP备06011573号
站长:大石头 信箱:gxuhy@21cn.com QQ:99363590
本站带宽由酷睿数据提供