1, 在请求一个 aspx 页面的时候 页面里面有代码逻辑会创建一个dataset 并用这个dataset从数据层获得一些数据. 最后玩家请求结束,该对象随着aspx页面的销毁而销毁.
-- 比较低效率的dataset反复创建. 我曾在一个帖子里面见有人说这个方式很差劲,但是他没说解决方案.我在怀疑是否有优化的方案. 因为就连他的载体, 这个 aspx 页面都是即时创建 然后用完之后被回收的. 我也知道这样对象的频繁创建和销毁不好,但是有什么方法能够让他更优化呢
-- 具体帖子见 http://topic.csdn.net/u/20110831/16/bec47034-3356-4a0f-8873-2d50a6554d95.html
C#不可忍受之慢——谁是罪魁祸首 34楼所说
2,我们知道对象 有时候 就是一个壳,一个对成员变量包装的壳;有时候我们会因为某种理由(频繁的请求,频繁的事件发生) 而频繁的创建这个长得一摸一样的壳 以及壳内各次不一样的 内容(成员变量)
-- 如果在单线程场景,我们完全可以公用这个壳, 用完之后壳不销毁,继续下次使用.
-- 如果在多线程场景,我们只有每次都new一个壳来盛装其各自的成员变量. 这个时候,壳无法公用.
-- 于是自然而然的,我相当上面 aspx 场景相同的理论. 在 多线/web请求型异步 发生的时候,我们不得不new好多好多的壳.诸如aspx壳之类的.
-- 不能重用这个壳的理由也很简单 : 异步的情况下,壳内内容可以被不知名线程所替换,到时候你再去拿这个壳办事情可能得到诡异的结果.我们,在后面这样的情况下,有可能重用这个壳吗?或者换个方式既能多线程 而又能 单壳重用
我并不是随意发出这样的疑问,而是因为碰到了实际的问题. 第2个问题.
-- 比较低效率的dataset反复创建. 我曾在一个帖子里面见有人说这个方式很差劲,但是他没说解决方案.我在怀疑是否有优化的方案. 因为就连他的载体, 这个 aspx 页面都是即时创建 然后用完之后被回收的. 我也知道这样对象的频繁创建和销毁不好,但是有什么方法能够让他更优化呢
-- 具体帖子见 http://topic.csdn.net/u/20110831/16/bec47034-3356-4a0f-8873-2d50a6554d95.html
C#不可忍受之慢——谁是罪魁祸首 34楼所说
2,我们知道对象 有时候 就是一个壳,一个对成员变量包装的壳;有时候我们会因为某种理由(频繁的请求,频繁的事件发生) 而频繁的创建这个长得一摸一样的壳 以及壳内各次不一样的 内容(成员变量)
-- 如果在单线程场景,我们完全可以公用这个壳, 用完之后壳不销毁,继续下次使用.
-- 如果在多线程场景,我们只有每次都new一个壳来盛装其各自的成员变量. 这个时候,壳无法公用.
-- 于是自然而然的,我相当上面 aspx 场景相同的理论. 在 多线/web请求型异步 发生的时候,我们不得不new好多好多的壳.诸如aspx壳之类的.
-- 不能重用这个壳的理由也很简单 : 异步的情况下,壳内内容可以被不知名线程所替换,到时候你再去拿这个壳办事情可能得到诡异的结果.我们,在后面这样的情况下,有可能重用这个壳吗?或者换个方式既能多线程 而又能 单壳重用
我并不是随意发出这样的疑问,而是因为碰到了实际的问题. 第2个问题.
我看了那个34楼说的,
protected void Page_Load(object sender, EventArgs e)
{
DataSet dataSet = GetData("select * from information where ...");
GridView.DataSource = dataSet;
...
}
他说的意思应该是:SQL语句未参数话的问题。和dataset是否反复创建没关系吧
就像大家都推荐“MVC适合开发大型项目”,可是大型项目(网站)要求负载高,速度快
所以我觉得这句话很正确 "便宜无好货,好货不便宜"
高效率写法:定义写在for的外面。for循环内公用一个壳。
参照:《改善C#的50条法则》一书
是否参数化和sql的效率还真扯不上半毛钱的关系.
数据库真正的效率层在GetData 这个方法的背后,他背后是否有高效的数据访问层做铺垫.他的意思是说NB的服务器因程序员的写法而导致当机.而我的意思有2个
1, 不要肆意夸大所谓效率的作用,因为你能碰到的极端场景有几个? 真正靠编码细节能解决的效率场景有几个?
-- 我的意思不外乎效率有时候真的跟程序员没什么本质关系,而只有次要条件关系. 本质关系是什么? 是你的分布式部署, 以及分布式服务器构架. 而不是你程序里面一个sql,一个dateset. 当然了,现在具体情况是这样:一个大型的团队,为了达到什么什么效果 他必须要求每个程序员的写法既漂亮又不那么低效率.2, 关于对象频繁创建与销毁. 对于这个细节问题我还真是有点头疼. 到底频繁创建与销毁 是否合理呢以及无法避免呢?至少我现在遇到的问题无法避免.
select * 会浪费好多资源.这样的话不要随意讲. 对于你的应用程序而言sql只是一个socket server. 你String 化的指令 就浪费他的资源了? 你以为你调用的 .net 参数型执行方式会给你带来什么优化?不是说让你不要用参数化执行sql的方式,也不是让你去用String化的方式.而是说: 不要是个事都跟执行效率挂钩. 他们根本都没有什么半毛钱的关系.