关于HSkyXChart的紧急问题

navy8 2003-08-22 01:12:29
我发现这个组件不能实现并发,并且每次执行完都会内存泄漏,作者要好好改一下,看一下我的问题:
如在用您的Hsky.XChart时,如果多刷新几次页面,估计近100下时就出现在面的提示:
<font face="宋体" size=2>
<p>HSky.XChart</font> <font face="宋体" size=2 > 错误 '8000ffff'</font>
<p>
<font face="宋体" size=2>存储空间不足,无法处理此命令。
</font>
<p>
<font face="宋体" size=2>/Report/reportGraph.asp</font><font face="宋体" size=2>,行30</font>
在检查DLL时,最大达到25M后就出现上述的提示,
请问是为什么,有没有解决的方法,谢谢
我的代码如下所示:

Public Sub GetGraphReport()
Dim cReport As New Report
GetGraphValues cReport
'====================MakeChart.asp 代码开始================

'----------------------需要检查如下:-------------------------
'---1.检查代码语法错误
'---2.检查include文件
'---3.Asp中的服务器端的函数提取出来
'---4.注意变量的定义
'---5.注意代码的分行
'---6.注意Response.END 后面是退出程序了,加入Exit sub 等,保证不再向下执行
'---7.注意Response.Redirect 后面是退出程序了,加入Exit sub 等,保证不再向下执行

Dim MyChart As HSky.XChart
Dim Test As Variant
'Set MyChart = New HSky.XChart
Set MyChart = Server.CreateObject("HSky.XChart") '创建Com对象

MyChart.Clear '清除该Com对象中的所有数据
MyChart.Title = "Head" '图表上标题
MyChart.Foot = "Foot" '图表下标题
MyChart.TitleAlign = 1 '图表上标题对齐方式(1左对齐,2居中,3右对齐)
MyChart.FootAlign = 3 '图表下标题对齐方式(1左对齐,2居中,3右对齐)
MyChart.Width = mvarLetWidth '图表宽度
MyChart.Height = mvarLetHeight '图表高度
MyChart.ViewAxis = True '设置图表的网格及坐标轴是否显示
MyChart.HText = mvarLetXText '图表横轴的说明(如果ViewAxis为false,则该属性无效)
MyChart.VText = GetYAxis '图表纵轴的说明(如果ViewAxis为false,则该属性无效)

MyChart.BgColor = mvarLetBG '图表背景的颜色
If mvarLetIsGradientColor = True Then
MyChart.SetGradientColor mvarLetGradientColorStyle, mvarLetGradientColorStart, mvarLetGradientColorEnd
'渐变方式:1从下到上;2从左下到右上;3从中心到四周;4从左上到右下;5从左到右;6从右到左;7从上到下
'设置图表背景渐变方式,以及开始颜色和结束颜色(图表背景的颜色将无效)
End If

'MyChart.BackImage="C:\bg.jpg" '设置图表背景图片(图表的背景颜色和渐变颜色都将无效)
MyChart.View3D = mvarLet3D '图表是否以3D模式显示
'MyChart.Percent3D = 10 '图表3D的比例大小(如果View3D为false,则该属性无效)
MyChart.Percent3D = mvarLetPercent3D
MyChart.SetHWallColor "569CE1" '设置图表横轴3D墙颜色(如果View3D为false,则该属性无效)
MyChart.SetVWallColor "569CE1" 'FFCC66 '设置图表纵轴3D墙颜色(如果View3D为false,则该属性无效)
MyChart.SetHAxisStyle 1, "2449A2" '设置图表横轴宽度和颜色
MyChart.SetVAxisStyle 1, "2449A2" '设置图表纵轴宽度和颜色
MyChart.SetHGridStyle 1, "ACACAC" '设置图表横轴绘图区网格的宽度和颜色
MyChart.SetVGridStyle 1, "ACACAC" '设置图表纵轴绘图区网格的宽度和颜色
MyChart.SetHLabelStyle mvarLetHLabelStyle, True '横轴刻度标识
MyChart.SetVLabelStyle mvarLetVLabelStyle, True '纵轴刻度标识
'设置横轴或纵轴刻度标识和是否对齐网格.其中标识类型: 1名字, 2统计图元标识, 3数值, 4空白
'MyChart.SetHNum 0,10 '设置横轴数值的最小值和最大值
'MyChart.SetVNum 0,1000 '设置纵轴数值的最小值和最大值
'以上两个属性设置后,系统将不再根据具体输入的数据自动改变大小
'如果需要由系统自动控制大小,请将以上两句注释或去掉
'以下部分为各部分显示字体样式设置
'MyChart.SetTitleFont 16,"宋体",1,"000066"
' | | | | | |
' | | | | | & = 字体颜色: 默认为蓝色
' | | | | & = 字体样式: 0默认,1加粗,2加斜,3加下划线,4加删除线
' | | | & = 字体名称: 默认为Arial字体
' | | & = 字体大小: 默认为12号
' | & = 对象属性
' & = 对象名称
MyChart.SetTitleFont 9, "宋体", 1, "FF0606" '设置图表上标题字体
MyChart.SetFootFont 9, "宋体", 0, "000066" '设置图表下标题字体
MyChart.SetHLabelFont 9, "宋体", 0, "000066" '设置图表横轴刻度标识字体
MyChart.SetVLabelFont 9, "宋体", 0, "000066" '设置图表纵轴刻度标识字体
MyChart.SetHTextFont 9, "宋体", 0, "000066" '设置图表横轴的说明字体
MyChart.SetVTextFont 9, "宋体", 0, "000066" '设置图表纵轴的说明字体
MyChart.ViewLegend = True '设置是否显示图例(如设置为false,则与图例相关的设置都将无效)
MyChart.LegendAlign = 1
'设置图例显示位置:1下面;2左边;3右边;4上面
MyChart.LegendStyle = 1
'设置图例显示类型:1自动;2显示Series;3显示Values
MyChart.SetLegendFont 9, "宋体", 0, "000066" '设置图表图例名称字体
MyChart.SetLegendColor "FFFFCC" '设置图表图例区域颜色
MyChart.SetLegendShadow 2, "0066FF" '设置图表图例区域阴影厚度和颜色
MyChart.SetFrameStyle 0, "8B2203" '设置图表边框宽度和颜色2449A2

MyChart.AddSeries mvarLetSeriesType, mvarLetSeriesName, "8B2203"
'设置图表图例类型和图例名称CE2622
'图例类型:1柱型图,2横柱型图,3折线图,4饼图,5点图,6区域图
'图例颜色,在多维曲线时显示
MyChart.ViewMarks = True '设置是否显示图元标识
MyChart.ViewClipped = False '图元标识是否允许超出绘图区
MyChart.ViewStairs = False

'是否阶梯状的显示数据
'(注意:该方法只能用于Series为3或6中图表,即3折线图,6区域图,在其他图表类型中无效)
MyChart.MarksLength = 20 '设置图元标识与图元间的距离
MyChart.SetBorderStyle 1, 1, "E7BC10"
'设置图元的边框的宽度、样式和边框颜色
'其中边框样式:1线,2线段,3点,4线段-点,5线段-点-点
MyChart.SetMarksBorderStyle 1, "E7BC10"
'设置图元标识的边框的宽度和边框颜色
'MyChart.SetMultipleStyle 1
'设置当有多个Series时,各Series之间的显示关系
'其中显示关系有:1直接重叠,2水平平铺,3竖直叠加,4全叠加
'(注意:该方法只能用于Series为1或2中图表,即1柱型图,2横柱型图,在其他图表类型中无效)
MyChart.SetBarStyle mvarLetBarStyleSharp, 1, mvarLetBarStyleColor
'设置柱子的形状、填充花纹、及填充花纹颜色
'其中柱子的形状:1方形,2区域渐变,3三角形,4倒三角形,5椭圆,6箭头
'其中填充花纹:1透明,2横线,3竖线,4右斜线,5左斜线,6方格,7斜方格
'(注意:该方法只能用于Series为1或2中图表,即1柱型图,2横柱型图,在其他图表类型中无效)
MyChart.SetPointStyle mvarLetPointStyleSharp, 2, 2
'设置数值点形状、宽度和高度
'其中数值点形状:1方形,2圆形,3向上三角形,4向下三角形,5十字架,6错误标识(X),7星号(*),8菱形,9小点
'(注意:该方法只能用于Series为3或5或6中图表,即3折线图,5点图,6区域图,在其他图表类型中无效)
MyChart.SetMarksFont 10, "宋体", 0, "000066", "F8E69E"
'设置图表统计图元标识的字体大小、字体名称、字体样式(标准同上)、字体颜色和字体区域背景颜色
MyChart.SetMarksStyle mvarLetMarksStyle, False
'设置图表图元标识显示风格和标识是否透明
'其中图元标识显示风格有:1数值、2.百分比、3.标识名称、4.标识名称和百分比、5.相对总和百分比
SetMyChartValue MyChart, cReport
Response.ContentType = "image/jpeg" '设置asp数据流输出类型
Response.BinaryWrite MyChart.JpgImage(100) '输出统计图片为Jpg格式(参数为图片质量)

' Dim temp As String
' Dim Result As VariantmvarLetRST
'temp = MyChart.JpgImage(100)
'Response.BinaryWrite (temp)
' Response.Write temp
'Response.BinaryWrite MyChart.BmpImage '输出统计图片为Bmp格式
'Response.BinaryWrite MyChart.EmfImage '输出统计图片为Emf格式
'Result = MyChart.SaveToJpg(App.Path + "\tempreport1.jpg", 100) '设置输出的Jpg统计图片保存位置和图片质量
'Result=MyChart.SaveToBmp("f:\MyHxBmp.bmp") '设置输出的Bmp统计图片保存位置
'Result=MyChart.SaveToEmf("f:\MyHxEmf.emf") '设置输出的Emf统计图片保存位置
'Response.BinaryWrite MyChart.About '显示本组件信息
MyChart.Close '关闭本组件资源
Set MyChart = Nothing '清空组件对象
Set cReport = Nothing
'=================Asp代码结束==================
End Sub
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dacsd 2003-09-06
  • 打赏
  • 举报
回复
eliphe(eliphe Alotus)您好!
绘图组件开发了吗?
eliphe 2003-09-04
  • 打赏
  • 举报
回复
请参考:http://www.skyec.com/U_View_BBS_Detail.asp?CID=58

具体内容:
Com对象的操作不像一般html描述或asp脚本的解释器原理,Com接口模型是windows程序在通用性上的一种规范,在asp等web模型中的扩展。可以粗略的认为,一个Com对象就是一个windows程序,试问,你在一分钟内同时打开130个程序运行会是什么结果?并且来说,该图表中采用了大量图形特效处理的手段,在这点上,大家都知道图像处理是很占系统资源(主要是cpu和内存)的,试问你能在你的机子上同时开130个photoshop吗?

解决的办法很简单:
第一种、采用更多更快的cpu阵列,更大的内存。
第二种、采用访问延迟,在同时并发较大时减少同时访问人数,强制延时。
第三中、你告诉我,你期望同时并发的人数,我给你做一个精简版,用最少的效果处理,以便提高图表处理速度。
第四中、不要采用Com方式,你可以向我定制 html或是vml规范的图表,但是效果处理上也必须要求精简,不然速度一定也慢。

顺便提一句:
如果有使用过mapInfo或是调用Word接口生成doc文件或者使用过Owc的朋友也可以做一下测试,看看是不是和我说的一样。

如果有使用过水晶报表的朋友,可能会问:为什么水晶报表会比较快呢?那么我说,请看一下rpt文件,并且在.net中水晶报表已经做了.net架构的封装,看一下有没有水晶报表的.net frameword,采用的机制不一样,结果也就不一样,大家明白了吧。

还有,关于HSkyXChart,我的目标是做成水晶报表,下一步会推出HSKyXChart数据库访问机制,动态读取数据库,并且会开发初HSKyXChart的 GUI设计界面(HSkyXChart Studio.net),可以向水晶报表一样所见即所得的设计图表。

我相信,没有什么是不可以实现的,但是我需要时间和大家的支持。

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧