校验码性能问题,大用户量访问无法显示。

huiqi2001 2004-09-19 04:20:30

抄网上某兄的代码,后面加上了个背景,对背景每个点进行扫描,随机改变点的颜色。
结果性能暴差,做注册单点压力测试的时候,10个用户就不行了。
不知道是不是随机生成点的函数InputBgColorArithmetic影响的性能。

gif.aspx

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace hnwy
{
/// <summary>
/// gif 的摘要说明。
/// </summary>
public class gif : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string VNum=GenerateCheckCode(4);
Session["VNum"]=VNum;
ValidateCode(VNum);
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
///
/// 生成验证码
///
/// 校验码长度
/// 返回校验码
private string GenerateCheckCode(int CodeLength)
{
string Vchar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
string[]VcArray=Vchar.Split(new char[]{','}); //将字符串生成数组
string VNum ="";
Random ro=new Random();
for(byte i=1;i<=CodeLength;i++)
{
VNum+=VcArray[(int)(35*ro.NextDouble())]; //数组一般从0开始读取,所以这里为35*Rnd
}
VNum="1234";
return VNum;
}
///
/// 将校验码生成图片
///
/// 校验码字符串
private void ValidateCode(string VNum)
{
int Gheight=(int)(VNum.Length * 9);

//gheight为图片宽度,根据字符长度自动更改图片宽度
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,18);
Graphics g = Graphics.FromImage(Img);
//刷背景色
Color bgColor=Color.Black;
Rectangle r=new Rectangle(0,0,Gheight,20);
//g.FillRectangle(new SolidBrush(bgColor),r);
InputBgColorArithmetic(g,r,20,Gheight);
//设置字体大小和类型

GraphicsUnit localGraphics=new System.Drawing.GraphicsUnit();
System.Drawing.Font FontPwd=new System.Drawing.Font ("Arial",10,FontStyle.Bold);//,aa);

g.DrawString(VNum,FontPwd,new System.Drawing.SolidBrush(Color.Black),0,0); //在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
//输出
System.IO.MemoryStream ms=new System.IO.MemoryStream();
//保存
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
private void InputBgColorArithmetic(Graphics g,Rectangle r,int hight,int longth)
{
//Color bgColor=Color.White;
SolidBrush BrColor=new SolidBrush(Color.Blue);
BrColor.Color=Color.Blue;
Random ro=new Random(10);
int colorstate=0;
for(int i=0;i<longth;i++)
{
for(int j=0;j<hight;j++)
{
if(ro.Next()%9==0)
{
colorstate=ro.Next()%3;
if(colorstate==0)
{
BrColor.Color=Color.Blue;
}
if(colorstate==1)
{
BrColor.Color=Color.Red;
}
if(colorstate==2)
{
BrColor.Color=Color.Green;
}
}
else
{
BrColor.Color=Color.White;
}
g.FillRectangle(BrColor,i,j,1,1);
}
}
}
}
}
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ianok 2004-11-09
  • 打赏
  • 举报
回复
晕!
只能为你顶
Seeko0 2004-11-09
  • 打赏
  • 举报
回复
//因为CodeLength一般不会超过8位,太多了难输入,所以采用返回Guid的方式动态生成,最大为8位
//还可以通过Guid()重载列表进行生成数据的控制,一般默认
private string GenerateCheckCode(int CodeLength)
{
string VNum =string.Entry;
Guid guid=Guid.NewGuid();
if(CodeLength>8)
CodeLength=8;
num=guid.ToString().Substring(0,CodeLength);
return VNum;
}
private void InputBgColorArithmetic(Graphics g,Rectangle r,int hight,int longth)
{
//其中的背景我想大可不必通过两个for循环来计算了吧,写个属性进行指定不就可以了吗?
}
huiqi2001 2004-09-19
  • 打赏
  • 举报
回复
UP
jamzh 2004-09-19
  • 打赏
  • 举报
回复
帮你UP
内容概要:本文系统介绍了C语言在底层系统编程与数据结构工程化实现中的核心技术,同时融合了现代Web开发中TypeScript类型系统与全栈项目架构设计。C语言部分聚焦操作系统接口调用、内存管理、文件操作与进程控制,深入讲解指针、动态内存分配、结构体与位运算,并通过实现简易shell、日志系统等工具强化实践能力;数据结构部分涵盖链表、栈、队列、哈希表、二叉树与图结构的C语言实现,结合时间与空间复杂度分析,应用于缓存系统、路径搜索等实际场景,并引入内存池优化频繁分配问题。TypeScript部分强调静态类型在提升代码可靠性中的作用,讲解基础类型、泛型、交叉与联合类型、条件类型等,并通过DTO与接口类型保障前后端数据一致性。全栈项目基于React/Vue + Node.js架构,实现RESTful API、JWT认证、统一响应结构,并结合ORM进行数据库操作,完成用户系统、权限管理与任务管理系统等实战项目。同时强调工程化建设,包括代码规范、单元测试、CI/CD及Docker容器化部署。; 适合人群:具备C语言和JavaScript基础,有一定编程经验,希望深入系统编程或向全栈工程师发展的1-3年开发者;; 使用场景及目标:①掌握C语言在系统级开发中的核心应用,如内存管理与系统调用;②实现常用数据结构并应用于工程场景;③构建类型安全的全栈项目,提升前后端协同开发效率;④建立完整的软件工程化能力体系; 阅读建议:学习过程中应结合代码实践,动手实现各类数据结构与系统工具,同步搭建全栈项目,配置工程化工具链,注重理论与实际项目的深度融合。
内容概要:本文介绍了脚本自动化运维在芯片行业中应用于EDA工具链的实战项目,重点解决工具配置、许可证管理与仿真任务调度等效率瓶颈问题。通过构建Bash与Python混合的自动化脚本系统,实现License动态调度、仿真任务并行化、断点续跑及版本兼容性处理,显著提升资源利用率与设计效率。典型案例如License调度脚本通过监控进程活跃度回收闲置许可,结合Flask API实现服务化查询与CI/CD集成,使工程师等待时间从4小时降至15分钟,License利用率提升至89%,并在7nm GPU项目中节约千万级成本。文章还展望了多云调度、AI预测与开源EDA适配等未来方向。; 适合人群:芯片设计工程师、EDA工具运维人员、自动化脚本开发者,以及具备Python/Bash基础的半导体行业技术人员;; 使用场景及目标:①优化高成本EDA许可证的分配与回收,提升资源利用率;②实现大规模仿真任务的自动编排与容错执行;③将自动化脚本嵌入CI/CD流程,支撑高频次验证与签核需求;④降低流片周期与研发成本,加速国产芯片研发进程; 阅读建议:此资源强调工程实践与系统思维的结合,建议读者在掌握基本脚本语法基础上,重点关注异常处理、权限控制、日志审计等生产级设计细节,并尝试将其方案迁移至实际EDA流程中进行调试与优化。

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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