http://www.xproer.com/bbs
给点意见,界面是丑了点,不过用的是树型导航。大家多点几下,帮看看速度如何。
用到了自已研究的缓存技术。嘿嘿

解决方案 »

  1.   

    这个真是太有信心了,做的非常的好,界面不但漂亮,而且速度快.....etc
      

  2.   

    看到朋友们的评价真令我感到兴奋。没想到自已的成果得到这么多朋友的欣赏:)
    我介诏一下技术吧,其实真正算得上技术的倒不多,就只有一个缓存技术是自已花了一些功夫研究的。这个缓存技术我暂时称它为 TxtCache 就是将数据存储到TXT文件中,这样比从数据库中获取数据快多了,当然用TXT文件存储数据是有一个缺点的,就是存储的数据不能太大,一般在1M-1.5MB之间。
    其实
      

  3.   

    速度真的很快~~~不过不知道是程序效率高还是访问人数少~
    感觉所谓的TxtCache效率应该不会高过asp2.0的数据缓存,或者直接做成静态页面,不知道实现的复杂度怎么样,这里面用asp2.0+sql2005数据缓存实现最简单,静态页面实现比较复杂开源吧 预定一份源码 [email protected]  呵呵
      

  4.   

    开源吧 预定一份源码 [email protected]  呵呵
      

  5.   

    yayx(yayx):
    缓存区的确和静态页面是差不多的,不过不完全是静态页面,具体内容我考完试后再来详细讲解
    不过用户新发表帖子后不需要通知后台(你可以发帖或者回帖试一下),而由前台全自动生成缓存数据,这样为管理员节省了时间。
    “不过不知道是程序效率高还是访问人数少”:可能两都原因都存在吧,一般来说我想因为程序效率的原因多一些:),没有哪个程序员不喜欢说自已程序效率不高的,嘿嘿。具体内容等你看了源码后再说吧。再透露一点,这个论坛用ACCESS数据库,100RMB买的空间,呵呵。相信空间不算很好吧。
      

  6.   

    想学习一下,如果开源给我一份[email protected]
      

  7.   

    忘记密码 会员申请  0月22日 8:31:27 星期一 
    欢迎您:0  
    XproerBBS讨论区 
    ---------------
      

  8.   

    确实快啊,我也要原码啊!
    [email protected]
      

  9.   

    http://www.1380000.com/count/ShowWebView.aspx
    好像和这里的速度差不多。这是一点缓存技术都没有用的。个人感觉,缓存嘛,不如直接做成静态页的形式。http://sc.1380000.com/PlaneMaterial/20070115134.htm像这种形式。
      

  10.   

    最近在学ASP.NET 2.0 我也预定一份,谢啦[email protected]
      

  11.   

    看了看你的那颗树就知道是TreeView.js完成的,图片都每变过,呵呵!框架中用到了ajax吧
    发个代码大家研究下
      

  12.   


    我最近在学习ASP.NET2.0开源吧 预定一份源码 [email protected]  呵呵
      

  13.   

    good 开源吧  [email protected]
      

  14.   

    [email protected]
    学习学习
      

  15.   

    数据量不大流量不大的情况下 asp+access写的都非常的快,建议在有一定数据或服务器压力下测试下
      

  16.   

    点左面树形菜单的文字不能打开,必须点“+”才能打开?大家是这样么?这一点不太好吧?
    好友就是最好能开源,让大家学习双击可以展开,
    速度飞快,
    开源预订一份
    [email protected]
      

  17.   

    速度确实不错,好像暂时不能发贴
    希望给在下一份
    [email protected]
    谢谢
      

  18.   

    楼主用的AjaxPro组件吧
    公司的一个项目也用AjaxPro,操作很方便,但还不是性能怎样?做的项目是内部系统,所以不需考虑访问量大了是否影响,不知运用到网站中了访问量大了效果如何?
    愿和LZ一起测试,谢谢!
      

  19.   

    速度不错,[email protected],希望能得到你的源码
      

  20.   

    开源吧!预定一份!
    [email protected]
      

  21.   

    看来大家都在要求开源。我也来预订一份。
    [email protected]
      

  22.   

    to andybll(冰雨)
    "人气那应该是 点击/回复",你看到的是缓存区的数据,在这里我要说明一下,由于今天早上要考试,所以我还没来得及将这些问题解释清楚,SORRY。缓存区的数据我暂时没有考虑这些细节,由于缓存区的数据是无法实时更新的。to qilinshu() 
    谢谢你的夸奖,大家一起进度to zdyguilong(Keep Walking!) 
    左边的树形论坛我用的是MzTreeView10控件,数据是通过Ajax读取的,其实你到www.xproer.com里面的XDV技术资源库可以看到更强的AJAX应用:),那个无限树形目录分类.to jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程) 
    "怎么你的论坛显示  0月22日呢?",由于我用JavaScript读取的本地的时间,我并没有做处理。
    另外我非常喜欢性能较高的系统,我这个系统用ACCESS数据库,如果http://www.1380000.com/count/ShowWebView.aspx也是用ACCESS数据库或者没有用任何数据库,而且数据也是即时读取(从网上抓取后分析)那我必须要向你学习,希望朋友你能在这里发一下你的一些大量数据处理的经验或技巧。:)
    没有完全使用HTML我考虑了一下,似乎暂时没有找到一个非常合理的理由来解释为什么论坛不用HTML代替缓存,不过我会仔细思考这个问题,如果在论坛这样的系统中使用HTML比缓存更有效的话我一定改用HTML。ps:不过好像在目前比较流行的一些论坛系统中我还没有看到用纯HTML来显示主题列表。说到HTML,我得说一下,用户信息我是用纯HTML来显示的,还有其它一些少量数据我也是用纯HTML显示的。
    解释一下为什么用缓存不用HTML,
    (1)第一个是纯HTML分页不太好解决,由于主题列表是动态的,也就是可能页面会经常更新,总主题条数会经常变动,而一般批量生成HTML在这里显然是不可取的。
    (2)我想我自已研究的这个缓存技术不单纯的只能用在目前这个论坛上,我想还可以用在其它的一些系统中,比如主站www.xproer.com我也用到了TxtCache缓存技术。如果我将这个缓存技术继续完善的话。
    (3)缓存技术的通用性,我将这些数据按照某一种规律(自行设计的数据结构)进行缓存,在其它的系统中也可以直接调用这些数据。举个例子,在网站中显示论坛最新注册的10位用户(不用新开页面,不用iframe框架页),在网站中显示最新发表的10篇帖子(跟CSDN一样),这时侯我相信缓存比纯HTML更有优势。to everyone
    此论坛是开源的,不过所有文件压缩的话有点大,请大家放心,不过由于系统稍大(主要是包含太多img),我还没有来得及整理。不过更让我关心的是我想与大家一起交流在开发类似于论坛系统的一些心得。不过我更想让刚入门的朋友更好的掌握这些技术。
      

  23.   

    晕,昨天晚上还没写完就按错键提交了。--!然后继续写的时侯学校又断网了,唉学校垃圾了我没话说了。好进入正题。
    其实我花时间研究这个缓存技术最主要的原因是因为我没钱买好点的空间:(,这个空间我只花了一160块钱搞定的,60块域名费,100块空间费,100MB空间。更不用谈SQL数据库了,这个论坛是用的ACCESS数据库。
    由于空间垃圾了,所以访问速度慢,这也是一般个人站长头痛的问题。所以我被迫想办法解决速度问题。最开始我花了很长一段时间来思考如何解决用户访问速度这个问题,但是一直都没有想到好的办法。
    而且户访问速度很大部分是取决于数据的处理速度(读取),所以就出现了许多用SQL数据库速度比用ACCESS数据库好的说法。当然我的意思并不是说SQL数据库不比ACCESS好,而是说数据库只是起到一个辅助功能,辅助我们方便进行数据的存储,但是我个人认为我们的重点应该放在如何将我们的代码写的更有效率,将我们代码中的Bug减到最低,最大限度的提升我们系统的运行效率,最大限度的降低内存占用率,最大限度的提高内存的使用率。所以我们仍然需要运用我们的聪明才智来提高我们系统的性能。 
    我们将大量的数据按我们设计的格式(数据表)存储在数据库中,然后方便我们的读取。我个人认为如果一个应用程序完全依赖数据库(所有操作都借助于数据库完成),那是不可取的。在解决系统缓存问题的过程中,我偶然在一篇文章中看到看到了某个论坛不错,其中他的站长也谈到了缓存技术问题,他说在他的论坛中他自已用了一种创新的缓存技术大大提升了论坛的速度。我是从这个消息后得到的启发,当时我看完后我就想我是不是也可以学习他的那种处理方法,将我的论坛中的一些常用数据缓存起来。为此我深入的研究了他的论坛的方方面面。最后得出结论是他的论坛在数据缓存方面处理的的确不错,相比动网,LeadBBS这些论坛来说它的确非常优化。而动网几乎是建立在数据库的基础上的,也就是说论坛速度的快慢完全取决于用户选择的数据库产品。最后我也将这些需要缓存的数据简单的分了一下等级,分别为(1)不常用数据,(2)一般数据,(3)通用数据。分完等级后我花了很长一段时间研究C#的缓存技术,但结果令人失望。无论Session还是Cache甚至最后我用了static都没有很好的解决系统性能。所以最终我认为我需要自已研究一个缓存技术来解决我自已的问题。其实不光是在论坛的缓存技术上花了非常多的时间,在论坛系统的每个页面的代码里面我也同样花了很多时间优化。其实论坛的雏形我大一就写出来了,但是我不说大家也应该想得到那时的论坛代码是多么的可笑:),效率也是极其低的。几乎是一个完全建立在数据库基础上的产品,没有半点自已的创新技术。直到现在自已C#能力稍稍提高了少许,然后才开始对以前的代码进行大面积优化,在优化的过程中大家也可以想象得到,我几乎重写了整个系统。
    大家可以看看源码。讲系统性能时我不得不讲一下string对象在影响系统性能方面所占据的重要地位。通常我们在使用<%# DataBinder.Eval(Container.DataItem, "Feid") %> 时都进行了许多 “+” 操作。而这对页面数据显示速度是具有很大的杀伤力的。我举个例子。<a href=’ <%#  http://www.xproer.com/news/data.aspx?id= + DataBinder.Eval(Container.DataItem, "Feid") %>’>新闻标题</a>这一句里面就进行了N个string对象的 + 操作,我相信每一位朋友都在网络上看到过类似的文章,意思就是说推荐使用 StringBuilder 对象来代替string对象在需要进行多次”+” 操作的代码上,但是我们却在许多地方忽略了一些细节,就是上面的例子。在这个例子中我们推荐使用JavaScript代码来解决打开超链接问题,我们可以将上一句改为<a href=’ <%# DataBinder.Eval(Container.DataItem, "Feid") %>’ onclick=”OpenNewLink(this);”>新闻标题</a>。在OpenNewLink()函数中我们获取这个对象的Href属性,然后再组成一个连接地址,最后再打开这个连接,虽然这样做麻烦一点,但是大家也看到了,我们删去了所有的string的”+”操作。如果是一个DataGrid控件,里面有这么一个模板列,如果我们一次显示30条数据,结果是不是为我们节省了30次的 string “+”操作??如果只是一个用户访问我们的系统那这30次string的”+”对我们整个系统来说并不算什么,但是如果现在有300位用户呢?那要进行多少次string “+”操作?3000呢?为了考虑aspx页面数据的显示速度我将每一个 <%# DataBinder.Eval(Container.DataItem, "Feid") %> 中字符串 + 操作都取消了。这点小小的改动为整个系统性能带来了非常大的提升,其实 C#里面的字符串"+"操作原理大家都清楚, 但是就是在一些实际的编写代码中不太注意。大部分页面数据的显示速度就被这些"+"给消耗了。
    未完,待续……
      

  24.   

    不错,不多说了!
    [email protected]
      

  25.   

    开源吧!预定一份!
    [email protected]
      

  26.   

    貌似也是个新论坛http://www.zealotforce.net/
      

  27.   

    學習學習,請求開源謝謝!
    [email protected]
      

  28.   

    不错,速度非常快!
    给一份[email protected]
      

  29.   

    网速快。值得发展。
    开源的话也给我一份。
    [email protected]
      

  30.   

    , 快点开源,,,为大家做点贡献,,,,,我订一份[email protected]
      

  31.   

    To:underwater(Never be afraid of bricks):
    非常感谢你的建议,就目前我的个人经验来讲我非常同意你的观点,论坛的确算得上是一个技术相当综合的项目。速度和性能是一方面,实用性也是一方面。由于目前这个论坛根本就没有达到一定的同用性级别,所以我想这是一个优势,因为我不需要考虑太多的问题,只需要专注最重要最核心的一件事情,缓存技术,其实我觉得一个论坛的核心基本上算是访问速度吧,也许在数据量不多的时侯速度问题不太突出,但是数据一但达到一定数量时这个问题就非常严重了。如果我们在开始的时侯没处理好这个问题,那么以后再来修改那几乎是不可能的。这里我想到了Google。也许说大了点,但是我认为事实如此,Google花了许多时间把他最重要的一件事情做好了,那就是核心搜索算法,功能上来讲一个搜索引擎的功能不算太多Google的功能也不算太多,但对于一个搜索引擎来说搜索算法应该算是最重要的。正是基于这种前题我才花了很长时间来思考一个论坛最重要的到底是什么?功能?界面?或许网友们说功能重要,也许也会说界面重要,但我认为访问速度应该算是一个论坛最重要的。因为大多数个人网站站长的论坛数据都不多,所以他们才感觉论坛的功能和界面重要,但是我想对于Google这样的论坛来说的话,他的界面不算太漂亮,但是网络上找不到一个数据量比他的论坛还多的社区。当然有的网友也会说“我的论坛本来就不可能达到那么多的数据,我就是为了玩玩”,那应该不是我们程序员的想法。Ps:暂时我没有想过这个推广这个论坛。
    另外一点,我这里想请教你一下关于”位置追踪、访问量统计”这些功能实现的技巧,我先说一下目前我的一些解决方案,其实这些功能我们都可以通过AJAX技术来解决,特别是位置追踪,这样对论坛数据显示几乎是没有影响的,因为异步执行。我们可以在每一个页面都调用一个AJAX函数来更新服务器上用于保存用户当前位置的数据表,达到记录用户位置的目的。
    再一点,作为一个技术人员,我想我暂时还没有办法摆脱对性能追求的这一想法,我想不光只我一个人吧。嘿嘿。由于现在我还是学生,我想在性能追求上应该比较多一些,相对于功能来讲。我比较注意实用。我认为一个论坛最核心的问题解决了,那么下面的一些问题都比较好解决,比如一些常用的功能我们都可以不通过数据库实现,完全通过AJAX实现,这样大大减轻了数据库负担,提高了系统性能。
    再一次感谢前辈的建议。To: adventure007(adventure)
    非常感谢你的支持,的确,开发这种论坛是10年前的技术,但对于我们这些新手来说这些技术却是非常重要的,因为我们目前所学习的知识和技术还不能够让我们创新出一种新技术。我们暂时只能吸收前人的经验,然后消化吸收后再慢慢进步。To:EveryOne
    非常感谢大家的支持,不过说实话我不太喜欢把所有代码全部一次性发布。我得从两个角度来解释。
    (1) 对于高手,很显示这里面许多代码对他来说都是没有必要的,比如论坛用户注册,等等。他应该喜欢看一些新的技术,比如TxtCach :) 和一些其它的处理技巧,这样才能进行交流。
    (2) 对于新手,里面大部分代码对他们来说都不太容易理解,即时代码写的已经非常的简洁,但是由于我比较懒,所以注释的不太多。新手应该比较喜欢页面级别的代码,也就是对于某个页面某个功能是如何实现的,例如分页,Cache应用,如何验证密码正确,哪种过滤SQL注入代码的算法效率最高等等。
    基于这两个角度的考虑,我决定将源代码分为几份发布,由于太大也不方便下载。另外如果那些朋友对于某些细节如何实现不太理解的话,我可以单独将这些代码发到论坛上便于讨论。
    如果大家有什么更好的意见请直接提出来。
      

  32.   

    另附:此论坛系统是用 .net 1.1 开发的。
      

  33.   

    to: zdyguilong(Keep Walking!) 
    "点左面树形菜单的文字不能打开,必须点“+”才能打开?",你可以双击文字展开目录。
      

  34.   

    使用文本文件作为数据缓存不是新鲜的技术
    你可以到几年前的别的程序里去找一找,很多的“无论Session还是Cache甚至最后我用了static都没有很好的解决系统性能”
    使用文本文件做缓存能比直接用内存做缓存快,这用脚指头想想都是不可能的。极力放大某个东西,一定用牺牲其他东西换来的。对一个搜索引擎来说,“搜索”就是核心内容。对一个论坛来说,核心内容可不是核心内容,或者核心内容不仅仅是性能。仅仅是为了体现一个技术,Demo就够了,没必要做庞大完整的项目。还是那句话,作为技术上的极力追求性能是允许和推荐的,做为应用项目的开发,这样的做法是不可取的,需求调研、设计模式等等才是重中之重。一个阶段有一个阶段的认知度,过一段时间,你会有新的认识,这也是长足进步的本质,在这方面我支持你。
      

  35.   

    你这么关心性能,我给你出几道基础的题目:string a 非 null 为字符串变量,以下几种与空值的比较方式,你知道它们之间的性能排序吗?
    a == ""
    a == string.Empty
    a.Length == 0
    a.Equals(string.Empty)
    string a = "aaaaaaaaa";
    string b = "bbbbbbbbb";
    string c = "ccccccccc";
    string d = "ddddddddd";
    你知道下面几种字符串连接的性能排序吗?
    string result = a + b + c + d;string result = a;
    result += b;
    result += c;
    result += d;StringBuilder sb = new StringBuilder();
    sb.Append(a);
    sb.Append(b);
    sb.Append(c);
    sb.Append(d);string result = string.Concat(a, b, c, d);
    a 为未知值的字符串,以下哪中方式比较更快
    a == null || a == ""
    string.IsNullOrEmpty(a)    //FX2.0 中的新方法
    少数这些操作的性能消耗很微小,但作为底层方法被反复使用时差异就大了。
      

  36.   

    to: underwater(Never be afraid of bricks) 
    再一次感谢你的建议,不过我好像没有说过"使用文本文件做缓存能比直接用内存做缓存快",呵呵。我现在想如何最大限度的提高论坛访问速度,在硬件设施不变的前提下。一般一个论坛数据多了的话,访问速度就慢下来了,我只是在想如何减缓这一个过程。尽量的提高速度,由于目前我使用的是ACCESS数据库,而ACCESS数据库是天生的并发访问处理差。所以我才想到了用TxtCache技术。当然我之所又这样做是考虑到最开始访问的人数比较少,所以大家更希望访问速度快一些,另外一方面也是考虑了一下广大个人站长。一般他们的数据量也不多,但希望访问速度比较快。如果大家都用SQL的话,那也不需要费这么多事了。:)在需求调研、设计模式这块我的确还没入门,希望前辈能指点一下。同时目前我的重点也开始转移了,因为做这些东西我只是想让自已掌握这些技术,随着自已开发时间的增加,我也越来越发现设计模式的重要性能。因为这个系统的大部分数据库操作代码我都是用一个小工具帮我写的。呵呵。
      

  37.   

    to: underwater(Never be afraid of bricks)给个答案吧 呵呵 
    一般来说用FX内置方法的都快
      

  38.   

    public static bool IsSafety(string s)
    {
          string text1 = s.Replace("%20", " ");
          text1 = Regex.Replace(text1, @"\s", " ");
          string text2 = "select |insert |delete from |count\\(|drop table|update |truncate |asc\\(|mid\\(|char\\(|xp_cmdshell|exec master|net localgroup administrators|:|net user|\"|\\'| or ";
          return !Regex.IsMatch(text1, text2, RegexOptions.IgnoreCase);
    }
    -------------------从哪儿copy的? 你知道这个是谁写的吗?呵呵。
      

  39.   

    用 txt 文件做缓存可能还存在潜在的问题,就是并发性导致的资源占用,如果没用锁的话,那就完蛋了。
      

  40.   

    to:underwater(Never be afraid of bricks)(1)a=string.concat(a,b)比 a+b快 40% 
    (2)StringBuilder比 concat 快微软官方也提供使用 StringBuilder。不过这也要有个前提,比如只有两个string进行 + 操作,那就没必要用 StringBuilder 对象了。string a = "aaaaaaaaa";
    string b = "bbbbbbbbb";
    string c = "ccccccccc";
    string d = "ddddddddd";
    你知道下面几种字符串连接的性能排序吗?
    string result = a + b + c + d;这个我不知道
      

  41.   

    to: underwater(Never be afraid of bricks)
    string.IsNullOrEmpty(a)    //FX2.0 中的新方法
    也是微软提供的,这个不用怀疑,当然它的快。因为是内置的,直接调用底层APIpublic static bool IsSafety(string s)
    {
          string text1 = s.Replace("%20", " ");
          text1 = Regex.Replace(text1, @"\s", " ");
          string text2 = "select |insert |delete from |count\\(|drop table|update |truncate |asc\\(|mid\\(|char\\(|xp_cmdshell|exec master|net localgroup administrators|:|net user|\"|\\'| or ";
          return !Regex.IsMatch(text1, text2, RegexOptions.IgnoreCase);
    }
    这段代码传说是微软提供的。关于使用TXT做缓存,我试过了,并发问题好像不存在(我在本地测试的)。据微软官方的解释,这其实跟垃圾回收机制有关。GC跟踪对象引用并且标识出正在运行的代码不能再引用的对象。但是如果这个引用经常被使用的话,那么它就不会立即被释放,也就是多位用户可能同时引用一个内存空间中的数据而不必重新分配新的内存空间。这将会给系统带来一定的性能。
      

  42.   

    underwater(Never be afraid of bricks)
    string a 非 null 为字符串变量,以下几种与空值的比较方式,你知道它们之间的性能排序吗?
    a == ""
    a == string.Empty
    a.Length == 0  //这个最快?
    a.Equals(string.Empty)
      

  43.   

    to: underwater(Never be afraid of bricks)给个答案吧 呵呵 
    一般来说用FX内置方法的都快-------------------大部分是的,因为有些已提供方法是调用非托管代码的,效率要块得多,如新增的一系列TryParse方法,而有些则是简单的逻辑封装,如string.Emptystr == null || str.Length == 0 要比 string.IsNullOrEmpty(str) 快string.IsNullOrEmpty(string) 方法的逻辑代码用Reflector就可以看到
    public static bool IsNullOrEmpty(string value)
    {
          if (value != null)
          {
                return (value.Length == 0);
          }
          return true;
    }
      

  44.   

    to:underwater(Never be afraid of bricks)
    http://www.cnblogs.com/juqiang/archive/2005/04/19/140538.html这位朋友已经帮我测试了,"从clr profiler的角度看string concat 和stringbuilder的性能差别 "不过话说回来,像这样的资料在网上的确非常难得找,因为稍微底层一点的东西都没有,大部分都是转来转去的。to:EveryOne
    再一次感谢各位朋友的支持,我正在思考如何将每一部分的源代码发给需要的朋友。希望朋友们不要一次性就说全部,说实话一次性下载全部的代码对自已没太大的用处。
    这样吧,我建个群,然后需要的朋友加一下,我们也可以在群里继续讨论有关论坛设计和开发中的一些问题。大家意下如何?
      

  45.   

    public static bool IsSafety(string s)
    {
          string text1 = s.Replace("%20", " ");
          text1 = Regex.Replace(text1, @"\s", " ");
          string text2 = "select |insert |delete from |count\\(|drop table|update |truncate |asc\\(|mid\\(|char\\(|xp_cmdshell|exec master|net localgroup administrators|:|net user|\"|\\'| or ";
          return !Regex.IsMatch(text1, text2, RegexOptions.IgnoreCase);
    }
    这段代码传说是微软提供的。
    ----------------------
    这段代码是我写的,可惜我不是微软的。
      

  46.   

    to:underwater(Never be afraid of bricks)public static bool IsNullOrEmpty(string value)
    {
          if (value != null)
          {
                return (value.Length == 0);
          }
          return true;
    }感觉上都是差不多的,呵呵,昨天在论坛里看到有人讨论过这个问题,不会是前辈你吧?
    value.length 速度快一些,具体那篇帖子里面也有详细的解释了。
      

  47.   

    to:underwater(Never be afraid of bricks)
    public static bool IsSafety(string s)
    {
          string text1 = s.Replace("%20", " ");
          text1 = Regex.Replace(text1, @"\s", " ");
          string text2 = "select |insert |delete from |count\\(|drop table|update |truncate |asc\\(|mid\\(|char\\(|xp_cmdshell|exec master|net localgroup administrators|:|net user|\"|\\'| or ";
          return !Regex.IsMatch(text1, text2, RegexOptions.IgnoreCase);
    }呵呵,这么巧?我以前在一个论坛里面也看到过一个一模一样的代码。非常好,我的灵感也是得益于这段代码。说出来不怕大家笑,以前我是用string.replace来过滤的,效率就不用说了,呵呵。
      

  48.   

    to:underwater(Never be afraid of bricks)
    http://www.cnblogs.com/juqiang/archive/2005/04/19/140538.html这位朋友已经帮我测试了,"从clr profiler的角度看string concat 和stringbuilder的性能差别 "
    -------------------------这个测试有一定的虚假性,因为他测试的不完整。在他做的测试中,是对某个字符串变量累加10000次,这个字符串的长度再不停得变、增长得越来越大、内存不停得重新分配,分配一个越大的字符串,性能消耗越大,因此慢了如果是拼接10次呢?
    如果是拼接100次呢?
    如果是这样呢?
    a  += ("a" + "a" + "a" + "a" .....);
    a  += ("a" + "a" + "a" + "a" .....);
    a  += ("a" + "a" + "a" + "a" .....);真正的结论是,当你需要反复很多次得进行拼接、或是需要构建一个大型的字符串,才要动用 StringBuilder, 杀鸡的话就不要用牛刀了,牛刀也要磨一下才快的。
      

  49.   

    呵呵,这么巧?我以前在一个论坛里面也看到过一个一模一样的代码。非常好,我的灵感也是得益于这段代码。说出来不怕大家笑,以前我是用string.replace来过滤的,效率就不用说了,呵呵。--------CVBBS 是吧,从 cnVery.Web.dll 里抓出来的是吧,那是我的淘汰品。那你看看这个论坛是不是很像 CVBBS 
    http://www.zealotforce.net/
      

  50.   

    to:underwater(Never be afraid of bricks)
    以前我也有过一个想法,就是在论坛中大量使用非托管代码来提速(我想的是使用STL)
    在C#代码中需要处理最多的就是字符串,可是没有字符串指针,这个令我非常郁闷。一般的值类型的变量又不太需要指针来处理了。不知道前辈在开发一些项目的过程中,对于使用非托管代码来提速是什么看法?
      

  51.   

    to:underwater(Never be afraid of bricks)
    以前我也有过一个想法,就是在论坛中大量使用非托管代码来提速(我想的是使用STL)
    在C#代码中需要处理最多的就是字符串,可是没有字符串指针,这个令我非常郁闷。一般的值类型的变量又不太需要指针来处理了。不知道前辈在开发一些项目的过程中,对于使用非托管代码来提速是什么看法?
    ----------------那你回去写C++的,好,不要糟蹋C#了。
      

  52.   

    to:underwater(Never be afraid of bricks)
    呵呵,的确是CVBBS的。
    http://www.zealotforce.net/有点像。不会是前辈写的吧?看来CVBBS前辈也参与了开发了。
    a  += ("a" + "a" + "a" + "a" .....);
    前辈的经验太棒了,的确 a  += ("a" + "a" + "a" + "a" .....);类似这样的写法效率非常高。不过一般我们都不太长用。好像一般这种写法都不太长见。我想在一些比较低层的需要深入优化的地方要用到这种写法吧。
      

  53.   

    CVBBS 的是我独自完成的,没人和我一起开发,你所看到的什么团队只是谣言。4.1.6 之后发生了一点事情,我把它全部扔给了别人,以后就不关我的事了。有兴趣你可以研究一下 4.1.6 之前之后的代码风格,完全不同的。http://www.zealotforce.net/ 是从半年前开发的新论坛程序。
    本来不想再做这种事情了,但有两个原因让我再去做一个新的、更好的
    一是弥补CVBBS的遗憾,那是曾经的成功的程序,却也是一个失败的产品
    二是就是你们这些个人老拿我的代码到处用贴,让我的虚荣心饱满,人哪,虚荣呀
      

  54.   

    a  += ("a" + "a" + "a" + "a" .....);

    a  += "a" + "a" + "a" + "a" .....
    有没有区别你去做测试,我没测试过,我也不知道
    a  += "a" + "a" + "a" + "a" .....

    a  = a + "a" + "a" + "a" + "a" .....
    反复循环进行时,差别可就大了
      

  55.   

    to:underwater(Never be afraid of bricks)
    a  += ("a" + "a" + "a" + "a" .....);

    a  += "a" + "a" + "a" + "a" .....
    有没有区别你去做测试,我没测试过,我也不知道区别是非常大的,这应该是一次分配多少的问题,有点跟STL模板里的Victor相似。具体我也不说了。
      

  56.   

    to:underwater(Never be afraid of bricks)
    a  += ("a" + "a" + "a" + "a" .....);

    a  += "a" + "a" + "a" + "a" .....
    有没有区别你去做测试,我没测试过,我也不知道区别是非常大的,这应该是一次分配多少的问题,有点跟STL模板里的Victor相似。具体我也不说了。----------------------这里的疑问是执行先后问题,不是内存分配问题。 -_____-!直观理解它们应该等同的,但不敢肯定,没做过测试。
      

  57.   

    [email protected]
    开源吧,学习下
      

  58.   

    To:lincai(隐身)
    最开始的时侯我也在很多页面通过AjaxPro封装函数,在页面中调用,后来感觉它似乎对性能有点影响,所以我就完全用Ajax写了。
    在网站中使用AJAX,多数是用来更新新闻查看次数等等。这些用普通的AJAX写就可以了,性能也有保障。
    实例:
    (1) 先写一个页面,专门用来接收新闻ID,并将这个新闻查看次数加一
    (2) 在访问页面中//声明创建HttpRequest对象JavaScript函数
    function CreateXmlRequest()
    {
    var xmlRequest;
    try 
    {
    xmlRequest = new XMLHttpxmlRequest();

    catch (s) 
    {
    try 
    {
    xmlRequest = new ActiveXObject("Msxml2.XMLHTTP");

    catch (othermicrosoft) 
    {
    try 
    {
    xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");

    catch(failed) 
    {
    xmlRequest = false;
    }
    }
    }
    if (!xmlRequest)
    {
    xmlRequest = null;
    }
    return xmlRequest;
    }
    //声明使用AJAX方法访问页面的函数
    function OpenHttpUrl(request,intMethod,url,xmethod)
    {
    switch(intMethod)
    {
    case 1: //GET
    request.open("GET", url, true);
    request.onreadystatechange = xmethod;
    request.send(null);
    break;
    case 2: //POST
    request.open("POST", url, true);
    break;
    }
    }//声明AJAX回调函数
    function DoNothing(){}最后
    var m_ajax = CreateXmlRequest();
    var m_link = “AddLookNum.aspx?id=” + 新闻ID号;
    OpenHttpUrl(m_ajax,1,m_link, DoNothing);
      

  59.   

    源码呢..
    预定[email protected]
      

  60.   

    to:EveryOne
    的确开源,但目前一个一个的发太麻烦,而且作用也不太大
    希望能与大家在一起交流技术。QQ群如何?
      

  61.   

    to:EveryOne
    Xproer技术交流群:6259764