另外,对于DOM的操作,建议访问innerHTML会有更好的效率,对于字符串的拼接,建议看看meizz的前几篇文章,使用数组,借用其join()方法...

解决方案 »

  1.   

    主体部分是一个写txt文本的循环操作,基本没有可优化的地方
    有哪位高人可以加我MSN,谢谢了[email protected]
      

  2.   

    一般应该是for循环之类次数太多,或者假死循环。
      

  3.   

    for(var i=0;i<100000;i++){}我运行了5次才 出现     我想一定没有清空内存
      

  4.   

    CollectGarbage();JScript uses a -and-sweep garbage collector with a variety of heuristics used to determine when to run garbage collection. The JScript garbage collector works like this:1、When the script engine is shut down, garbage is collected.2、When 256 variants, or more than 64KB of strings, or more than 4096 array slots have been allocated, the garbage collector sets a flag that says collect soon.3、Whenever a new statement is executed or the script debugger starts, that flag is checked, and if it is set, a collection is done.There is an undocumented JScript function called CollectGarbage that forces a garbage collection. This is for testing purposes only—do not ship code that calls this function. It is a poor programming practice to write code in JScript that depends on garbage collections being done at particular times. If you need predictable garbage collection, use a language that supports it (like Visual Basic? or VBScript). Note that all of this is the implementation detail of the engine and should not be relied upon because it may change in the future. Note also that the version of JScript supported by Microsoft? .NET will use the .NET Framework garbage collector, a multigenerational -and-sweep collector.
    And remember, if you want a deterministic-lifetime app, use a deterministic-lifetime language like C++, Visual Basic 6.0, or VBScript; not an indeterministic-lifetime language like JScript, Scheme, or Java. If you're writing a program that depends on being able to have a deterministic object lifetime, JScript is not the right tool for the job. Trying to make it a deterministic-lifetime language will just create headaches down the road.
      

  5.   

    glaciall(处女主任_天苍苍,野茫茫,风吹裤裆毛飞扬) 优化的话具体从哪几方面着手?
      

  6.   

    garbage collection指内存整理吗?可是上面提到在js里不推荐使用阿
      

  7.   

    不推荐归不推荐,优化的话,看你的循环,看你的代码,内存中建立的对象多不多,AND SO ON.....
      

  8.   

    貌似多的但是用varname=null的方法不能释放吗?运行过程中占用内存量没有明显增加阿
      

  9.   

    for(var i=0;i<1000000;i++){
    var a=new Array();
    CollectGarbage();
    }还是会有。
      

  10.   

    var i,a;
    for(i=0;i<1000000;i++){
      a=new Array();
      if(i%2000 == 0) CollectGarbage();
    }像这样的好些,不过再具体的要看你的了..
      

  11.   

    测过了,if(i%2000 == 0) CollectGarbage();
    这条语句对是否出现那个对话框基本没有影响
    下面是我认为出现问题的部分,MyDataset的记录条数过多,导致循环多次
    if(MyDataset && MyDataset.RowCount!=0)
    {
    MyDataset.MoveFirst();

    var attributevalue=null;
    var attributevalueprev=null;
    for ( var record = 0; record < MyDataset.RowCount; record++ )
    {
    for(var anum=0;anum<MyAttributeNameTemp.length;anum++)
    { var attributenametemp=MyAttributeNameTemp[anum];
    try{
    if(attributenametemp=='GPRS_RAU_Time'||attributenametemp=='RMAC_DL_NumTimeslots_Used_Actual')
    {}
    else
    {
    attributevalue=null;
    if(true)
    {

    attributevalue = MyDataset.Fields(attributenametemp).Value;

    } }

    if(attributevalue!=null)fsattri.WriteLine(MyAttributeIDTemp[anum]+","+String(attributevalue)+","+(record+maxID+1));

    }
    }
    catch(err)
    {logfile.WriteLine(timenow+"    "+Tempname);
    logfile.WriteLine(err.message);
    logfile.WriteLine("写Comm_Attribute相关文件时出错!出错参数:"+attributenametemp);
    logfile.WriteLine();
    ifhaveerror=2;}
    }
    MyDataset.MoveNext();
    }
    }
      

  12.   

    if(MyDataset && MyDataset.RowCount!=0)
    {
        MyDataset.MoveFirst();

        var attributevalue=null;
        var attributevalueprev=null;
        for ( var record = 0; record < MyDataset.RowCount; record++ )
        {
    for(var anum=0;anum<MyAttributeNameTemp.length;anum++)
    {    var attributenametemp=MyAttributeNameTemp[anum];
       try{
       if(attributenametemp=='GPRS_RAU_Time'||attributenametemp=='RMAC_DL_NumTimeslots_Used_Actual')
       {}
       else
       {
       attributevalue=null;
      if(true)
      {

         attributevalue = MyDataset.Fields(attributenametemp).Value;

       }    }

    if(attributevalue!=null)fsattri.WriteLine(MyAttributeIDTemp[anum]+","+String(attributevalue)+","+(record+maxID+1));

    }
    }
    catch(err)
    {logfile.WriteLine(timenow+"    "+Tempname);
    logfile.WriteLine(err.message);
    logfile.WriteLine("写Comm_Attribute相关文件时出错!出错参数:"+attributenametemp);
    logfile.WriteLine();
    ifhaveerror=2;}
    }
    MyDataset.MoveNext();
    }
    }
      

  13.   

    你是在读取数据库并写入到文件中是吗?建议for ( var record = 0; record < MyDataset.RowCount; record++ )
    这种改为
    for(var record ==0,l=MyDataset.RowCount;record<l;record++)
    这样可以省去每次循环去检查MyDataset.RowCount的值.再个,你保存入文件时,应该一次性写入,不该在每个循环里做一次WriteLine,那样太多的文件IO操作,更加耗资源,把所有的文本都存在一个变量里,到时一次性存入,对于大型字符串的拼接,你可以先把它一段一段的放到数组里,最后使用join()方法连接起来,快.再者,如果数据量真太太多了的话,想个办法,分批保存....
      

  14.   

    其实是从一个软件中得到一个dataset,利用那个软件自带的API函数取的,实际上dataset的行数达到100000以上就会出问题了,分批。。能提供个思路吗?谢谢了~~
      

  15.   

    呵呵,如果你把分结到matrixy那个号上还更好些,这个马甲只是用来玩滴....分批的话,你按现在的做一次再说.其实有那个提示并非定是内存占用过多,具体说来,应该是内存占用时间过多..如果你使用while(1);这么简单的一句,也一样会出现那样的提示.好的做法应该是,你保存一部分后,让IE休息一会儿,再接着干,哈哈...