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个问题.

解决方案 »

  1.   

    比较低效率的dataset反复创建?
    我看了那个34楼说的,
    protected void Page_Load(object sender, EventArgs e)
    {
      DataSet dataSet = GetData("select * from information where ...");
      GridView.DataSource = dataSet;
      ...
    }
    他说的意思应该是:SQL语句未参数话的问题。和dataset是否反复创建没关系吧
      

  2.   

    关于效率问题还真的不好说的
    就像大家都推荐“MVC适合开发大型项目”,可是大型项目(网站)要求负载高,速度快
    所以我觉得这句话很正确  "便宜无好货,好货不便宜"
      

  3.   

    低效率的写法:for循环里反复定义并New一个对象。特别是大对象。
    高效率写法:定义写在for的外面。for循环内公用一个壳。
    参照:《改善C#的50条法则》一书
      

  4.   


    是否参数化和sql的效率还真扯不上半毛钱的关系.
    数据库真正的效率层在GetData 这个方法的背后,他背后是否有高效的数据访问层做铺垫.他的意思是说NB的服务器因程序员的写法而导致当机.而我的意思有2个
    1, 不要肆意夸大所谓效率的作用,因为你能碰到的极端场景有几个? 真正靠编码细节能解决的效率场景有几个?
       --  我的意思不外乎效率有时候真的跟程序员没什么本质关系,而只有次要条件关系.  本质关系是什么?  是你的分布式部署,  以及分布式服务器构架.  而不是你程序里面一个sql,一个dateset.  当然了,现在具体情况是这样:一个大型的团队,为了达到什么什么效果 他必须要求每个程序员的写法既漂亮又不那么低效率.2, 关于对象频繁创建与销毁.  对于这个细节问题我还真是有点头疼. 到底频繁创建与销毁 是否合理呢以及无法避免呢?至少我现在遇到的问题无法避免.
      

  5.   

    如果线程使用的话可以创建线程池ThreadPool ,另外.net 4.0中有个Task类也可以实现ThreadPool的功能
      

  6.   

    有考虑用池.  比如频繁且变化不大的对象 准备丢入 hashtable 里正在设想可行性
      

  7.   

    对于第一个问题,我觉得lz应该理解错了,我们在写sql的时候,最好不要用select *,会浪费很多资源,对于数据量小时看不出来的,一旦数据量超过十万,百万,速度会明显慢很多 ,我们宁愿多写一点点代码,来降低数据库损耗的性能
      

  8.   


    select * 会浪费好多资源.这样的话不要随意讲.  对于你的应用程序而言sql只是一个socket server.  你String 化的指令 就浪费他的资源了?  你以为你调用的 .net 参数型执行方式会给你带来什么优化?不是说让你不要用参数化执行sql的方式,也不是让你去用String化的方式.而是说:  不要是个事都跟执行效率挂钩.  他们根本都没有什么半毛钱的关系.