高分 问一问题。。。。快来吧

lx8900133 2009-07-03 11:27:38
public string GetInfo(string name, string pwd)
{
string gid = "1";
string sql = "select groupid from table_user where username='" + name + "' and userpassword='" + pwd + "'";
SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.SqlConnectionString, CommandType.Text, sql);
if (dr.Read())
{
gid = dr["groupid"].ToString();

}

dr.Close();

string sql1 = "select top 30 NewsId,NewsContent,PostDataTime from table_content where groupid like '%," + gid + ",%' order by newsid desc";
return SqlHelper.ExecuteDataset(SqlHelper.SqlConnectionString, CommandType.Text, sql1).GetXml();



}


上面是我的一个webservices的方法。。。。客户端软件 经常要调用,根据账户和密码 返回数据。。

问题是这样的,正常情况下 客户端调用 返回都很正常 速度还也行。。sql我在查询分析器执行<1秒。

但有时候 客户端 接到一个指令,上千个用户就会同时去掉用这个方法,导致速度非常的慢,这个时候我进服务器 发现w3+sql的 cpu 近100%

为什么同时的时候 会这么慢呢。有没有好的方法处理。。。把sql改成存储过程 有用吗? 谢谢了。
...全文
32 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
论文MVP网 2009-07-06
  • 打赏
  • 举报
回复
再说一下, 不要主管意识判断失误, 比如你肚子疼,你就来医院看肚子,那个医生一听你说肚子疼,就非要在你的胃上上找出问题,实际上是你的阑尾有问题,你来SQL板块,他们也不看啥情况,就直接找SQL语句问题,其实是处在你C#代码的SQLhelper的问题上,他们根本没用过所以产生混乱思维
论文MVP网 2009-07-06
  • 打赏
  • 举报
回复
楼主 我一看就知道你是啥问题了
我可以说下 他们所有人的回答都是错误的, 你的语句那么简单 所以可以说和存储过程毫无关系,

你用存储过程也是这样,


你错误的原因在错误的使用了SQLHELPER类的方法,
你是内存泄露了,告诉你SQLHELPER正确的用法吧:

sqlconnection conn=new sqlconnection(connstring);
conn.open();
sqldatereader dr=sqlhelper.ExcecuteReader(conn,commandtype.text,"selct * from table");
if(dr.read())
{
xxxxx;
}
dr.close();

conn.close();



你的错误就是 没有关闭conn.close, 你进入sqlhelper类中看看,保证是sqlhelper里面有个dispose()
方法,他是用来关闭当前连接的,结果你没有调用,他是不自动关闭conn.close()的,这里你改成手动肯定OK的,再次强调和存储过程毫无关系,你不信就别用SQLHELPER 你直接手写连接,保证没这个问题
论文MVP网 2009-07-06
  • 打赏
  • 举报
回复
送啥错了 你开玩笑呢 你自己DR.CLOSE关闭 等于关闭CONN.CLOSE吗? 你自己查查资料 做试验看看


楼主 这个问题 就是我说的情况 我保证没错 我原来遇到过 我能不知道
lx8900133 2009-07-06
  • 打赏
  • 举报
回复
14楼。。dr.close 不就是关闭了么。。会关联conn关闭的啊。

好像送错分了也。
claro 2009-07-03
  • 打赏
  • 举报
回复
帮顶。
-晴天 2009-07-03
  • 打赏
  • 举报
回复
1.改用存储过程.
2.增加索引
3.优化语句结构,能连接的就不用子程序,能直接查询的就不用模糊.
4.优化数据库结构.
5.换性能更强劲的服务器.
6.检查网络状态,带宽是否足够.
Zoezs 2009-07-03
  • 打赏
  • 举报
回复
这种情况你用存储也没啥用,首先优化表结构,正确尽可能的缩短查询时间。
你这里只是查询,select * from tb(nolock) 防止所表。
还有提高你的Server的性能。
Zoezs 2009-07-03
  • 打赏
  • 举报
回复
这种情况你用存储也没啥用,首先优化表结构,正确尽可能的缩短查询时间。
你这里只是查询,select * from tb(nolock) 防止所表。
还有提高你的Server的性能。
pt1314917 2009-07-03
  • 打赏
  • 举报
回复

create proc wsp
@name varchar(50),
@pwd varchar(50)
as
select top 30 NewsId,NewsContent,PostDataTime from table_content a,table_user b where a.groupid like '%'+b.groupid+'%' and b.username=@name and b.userpassword=@pwd order by newsid desc
SQL77 2009-07-03
  • 打赏
  • 举报
回复
string sql1 = "select top 30 NewsId,NewsContent,PostDataTime from table_content where groupid like '%," + gid + ",%' order by newsid desc";
在newsid 字段上建立索引!
LIKE'%%'可否根据需要换成其他
kingtiy 2009-07-03
  • 打赏
  • 举报
回复
把这几个SQL语句改成存储过.
lx8900133 2009-07-03
  • 打赏
  • 举报
回复
增加groupid 索引?????????????????
XwoodWu 2009-07-03
  • 打赏
  • 举报
回复
优化是综全来做的,改存储过程要做,另外表增加groupid 索引,但本人不建议使用表联合,那会影响性能,
like 语句也要少用,所以你的存储模型是否考虑重新设计一下??
lx8900133 2009-07-03
  • 打赏
  • 举报
回复
那各位建议是 换成存储过程 还是 加上(nolock)????
怎么样写存储过程 才合理 包括索引
--小F-- 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lx8900133 的回复:]
用了存储过程  能改善并发读取数据吗?


[/Quote]

会的
lx8900133 2009-07-03
  • 打赏
  • 举报
回复
用了存储过程 能改善并发读取数据吗?

lx8900133 2009-07-03
  • 打赏
  • 举报
回复
可我现在查询时不会超过1秒啊,就是人多的时候慢。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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