btw, Axapta already exposed syntax parser. You can subclass ParserClass and 
handle event methods

-----Original Message-----
From: "Jacob Hjelmer Nielsen" <[EMAIL PROTECTED]>
To: <[email protected]>
Date: Mon, 9 Jan 2006 09:19:27 +0100
Subject: RE: [development-axapta] Performance Issue

> Hi Maverick
> 
> Just out of curiosity what is the purpose of your code.
> It looks like you're building a parse tree?
> 
> Med venlig hilsen/Best regards
> 
>  
> 
> Jacob Hjelmer
> 
>  
> 
> 
> thy:development  
> 
> SЬvej 13B
> 
> DK-3460  BirkerЬd
> 
>  
> 
> Tlf.:            +45 96 170 470
> Fax:           +45 45 824 544
> Mobil:         +45 24 474 032
> 
> E-mail:       [EMAIL PROTECTED] 
> 
>  
> 
> www.thydevelopment.com
> 
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf 
> Of Bayliss, Barry
> Sent: 8. januar 2006 23:49
> To: [email protected]
> Subject: RE: [development-axapta] Performance Issue
> 
> 
> Maverick,
> 
> Thanks for the first piece of code, now for the rest.
> 
>       What are the declarations of Stable1, Stable2, Stable3, Stable4?  (If 
> non-standard, what is your table definition?)
>       What indexes are on tables used?
>       What is the code in the function this.changeComments()?
>       What is the code for the function TOI_SpecialTokens::find?
>       What is the code for the function TOI_PrimitiveDataTypes::find?
> 
> To try and speed up this piece of code:
> 
>       Why are you using RecID as part of your select statement?  
>       What are you trying to achieve in this piece of code?
>       Have you modified the update function on the table, ie requiring the 
> use of doUpdate?
>       
> 
> Barry.
> 
> 
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf 
> Of Maverick
> Sent: Friday, 6 January 2006 6:16 PM
> To: [email protected]
> Subject: Re: [development-axapta] Performance Issue
> 
> Stable1 consists of millions of records. And I have to do conditional updates 
> for every record.
> 
> ttsbegin;
>     while select forupdate STable1 index RecIdx
>     {
>         if(stable1.TokenType==TOITokenType::Comments)
>         {
>             this.changeComments(stable1);
>         }
> //ISS00019 starts
>         if(TOI_SpecialTokens::find(STable1.TokenName))
>         {
>             STable3.clear();
>             select firstonly STable3 index RecIdx
>             where STable3.RecId     >  STable1.RecId        &&
>                   Stable3.TokenName == ")";
>             STable4.clear();
>             while select forupdate STable4 index RecIdx
>             where Stable4.RecId     >  STable1.RecId        &&
>                   Stable4.RecId     <  STable3.RecId        &&
>                   Stable4.TokenType != TOITokenType::Operator
>             {
>                 STable4.TokenType = TOITokenType::SpecialToken;
>                 STable4.doUpdate();
>             }
>         }
> //ISS00019 ends
>         if(stable1.TokenName==".")
>         {
>             stable2.clear();
>             select firstonly stable2 Index RecIdx
>             where stable2.RecId==stable1.RecId+2;
>             if(stable2.TokenName == "(" ||
>                stable2.TokenName == "()" )
>             {
>                 stable2.clear();
>                 select firstonly forupdate stable2 Index RecIdx
>                 where stable2.RecId ==  stable1.RecId+1;
>                 stable2.TokenType = TOITokenType::MethodName;
>                 stable2.doUpdate();
>             }
>             else
>             {
>                 stable2.clear();
>                 select firstonly forupdate stable2 Index RecIdx
>                 where stable2.RecId     == stable1.RecId+1 &&
>                       stable2.TokenType != TOITokenType::Operator;
>                 if(stable2)
>                 {
>                     stable2.TokenType =TOITokenType::FieldName;
>                     stable2.doUpdate();
>                 }
>             }
>         }
>         if(stable1.TokenType==TOITokenType::VariableName)
>         {
> //Case For Index
>             stable2.clear();
>             select firstonly stable2 Index RecIdx
>             where stable2.RecId == stable1.RecId-1;
>             if(STable2.TokenName == "index"  ||
> /*ISS00018 START*/
>                STable2.TokenName == "hint")
> /*ISS00018 END*/
>             {
>                 stable1.TokenType = TOITokenType::IndexName;
>                 stable1.doUpdate();
>             }
>         }
> 
> //Case For MethodName
>         if(STable1.TokenName == "(" ||
>            STable1.TokenName == "()")
>         {
>             stable1.TokenType = TOITokenType::Operator;
>             stable1.doUpdate();
>             stable2.clear();
>             select firstonly forupdate stable2
>             where stable2.RecId     == STable1.RecId - 1          &&
>                   stable2.TokenType != TOITokenType::FunctionName &&
>                   stable2.TokenType != TOITokenType::KeyWord;
>             if(stable2)
>             {
>                 stable2.TokenType = TOITokenType::MethodName;
>                 stable2.doUpdate();
>             }
>         }
> //Case for Primitive Types
>         if(TOI_PrimitiveDataTypes::find(STable1.TokenName))
>         {
>             stable1.TokenType = TOITokenType::DictionaryType;
>             stable1.doUpdate();
>         }
> //Case for Either Method or Enum
>         if(STable1.TokenName == "::")
>         {
>             stable2.clear();
>             select firstonly stable2
>             where stable2.RecId     == STable1.RecId+2 &&
>                  (stable2.TokenName == "("             ||
>                   stable2.TokenName == "()");
>             if(!stable2)
>             {
>                 UpdateSTable.clear();
>                 select firstonly forupdate UpdateSTable
>                 where UpdateSTable.RecId == STable1.RecId+1;
>                 UpdateSTable.TokenType = TOITokenType::EnumValue;
>                 UpdateSTable.doUpdate();
>             }
>             UpdateSTable.clear();
>             select firstonly forupdate UpdateSTable
>             where UpdateSTable.RecId == STable1.RecId - 1;
>             UpdateSTable.TokenType = TOITokenType::DictionaryType;
>             UpdateSTable.doUpdate();
>         }
>     }
>     ttscommit;
> 
> 
> I was thinking of breaking this code in several different functions for every 
> condition, what do you suggest ?
> Going for select case for every condition will be good or going the way it is 
> , is good?
> 
> Maverick
> 
>   ----- Original Message ----- 
>   From: Bayliss, Barry 
>   To: [email protected] 
>   Sent: Friday, January 06, 2006 3:39 AM
>   Subject: RE: [development-axapta] Performance Issue
> 
> 
>   Maverick,
> 
> 
>   Can you post the concerned piece of code?
> 
> 
>   Barry.
> 
> 
>   -----Original Message-----
>   From: [email protected] [mailto:[EMAIL PROTECTED] On 
> Behalf Of Maverick
>   Sent: Thursday, 5 January 2006 3:55 PM
>   To: [email protected]
>   Subject: Re: [development-axapta] Performance Issue
> 
>   Thanks Jacob,
> 
>   In the case of ttscommit:
>   What if runtime memory gets full and still updates have to be done....Since 
> I think that updates are done in run time memory. 
>   Maverick
> 
>     ----- Original Message ----- 
>     From: Jacob Hjelmer Nielsen 
>     To: [email protected] 
>     Sent: Wednesday, January 04, 2006 7:47 PM
>     Subject: RE: [development-axapta] Performance Issue
> 
> 
>     Hi
>     Regarding recordset operations:
>     Note that this only works if no code exist on the insert/update events 
> methods on the table, otherwise it will fall back to the traditional 1 by 1 
> insertion/update.
>     However this can be bypassed by using the skipDataMethods() method -but 
> careful now you must be 100% sure on what you're doing.
>     Alternatively, you could try using the recordInsertList, this is actually 
> documented in \System Documentation\Classes\RecordInsertList
> 
>     ttsCommit 
>     Should be called after the last update,
> 
>     Client/server:
>     Make sure that your code is running on the server, thus eliminating 
> cross-tier calls.
> 
>     Primary Index:
>     I assume you have a primary index!
> 
>     Cluster Index:
>     When used, this is often your primary index. 
>     If your primary key's values are consecutive the data is handled ok - 
> however if the values assigned to the primary key are not consecutive every 
> insert will cause the database to reorganize data for optimal fetch of the 
> records afterwards.
> 
>     If the problem persists, you should tell us a bit more about the 
> environment.
> 
> 
>     Med venlig hilsen/Best regards
> 
>     Jacob Hjelmer
> 
> 
>     thy:development  
>     SЬvej 13B
>     DK-3460  BirkerЬd
> 
>     Tlf.:            +45 96 170 470
>     Fax:           +45 45 824 544
>     Mobil:         +45 24 474 032
>     E-mail:       [EMAIL PROTECTED] 
> 
>     www.thydevelopment.com <http://www.thydevelopment.com/> 
>     www.x-masterclass.com <http://www.x-masterclass.com/>  High-end education 
> program for Axapta developers.
>     ________________________________
> 
>     From: [email protected] [mailto:[EMAIL PROTECTED] On 
> Behalf Of Dilip N
>     Sent: 4. januar 2006 13:39
>     To: [email protected]
>     Subject: Re: [development-axapta] Performance Issue
> 
>     Maverick:
>        
>       Try using INSERT_RECORDSET / UPDATE_RECORDSET..This will speed up the 
> operation. 
>        
>       Good luck
>        
>       Regards,
>       Dilip
> 
>     Maverick <[EMAIL PROTECTED]> wrote:
>       Hi All,
> 
>     I have some code which is processing thousands of update on the table. 
> This process is doing all the updates on one table. Updates consists of 
> inserting new record and updation of a record. 
> 
>     The process consist of a loop, doing updation on a table on every record 
> conditionally. And this is done several times. And table consists of million 
> of records.
> 
>     What are the ways to optimize the process. Please do tell me all the 
> points to be taken care in the CODE,TABLE and in the SQL.
> 
>     Like:
> 
>     When should TTSCOMMIT be done. If it is done after every update it will 
> take too much time. And if it is after thousands of update, it takes runtime 
> memory. 
> 
>     What about Index, should it be primary OR cluster. 
> 
>     What properties of SQL Server should be set for better updation.
> 
>     If you would like to put light on any other point, it willl be very 
> helpful.
> 
>     Thanks
> 
>     Maverick
> 
> 
>     [Non-text portions of this message have been removed]
> 
> 
> 
> 
> 
>       SPONSORED LINKS 
>             Computer part   Programming languages   Microsoft axapta     
> Support exchange 
>         
>     ---------------------------------
>       YAHOO! GROUPS LINKS 
> 
>         
>         Visit your group "development-axapta" on the web.
>         
>         To unsubscribe from this group, send an email to:
>     [EMAIL PROTECTED]
>         
>         Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.. 
> 
>         
>     ---------------------------------
>       
> 
>       
> 
> 
>                 
>     ---------------------------------
>     Yahoo! DSL Something to write home about. Just $16.99/mo. or less
> 
>     [Non-text portions of this message have been removed]
> 
> 
> 
> 
> 
>     ________________________________
> 
>     YAHOO! GROUPS LINKS 
> 
>     *      Visit your group "development-axapta 
> <http://groups.yahoo.com/group/development-axapta> " on the web.
>             
>     *      To unsubscribe from this group, send an email to:
>           [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> 
>             
>     *      Your use of Yahoo! Groups is subject to the Yahoo! Terms of 
> Service <http://docs.yahoo.com/info/terms/> . 
> 
>     ________________________________
> 
> 
> 
>     [Non-text portions of this message have been removed]
> 
> 
> 
>   
> ------------------------------------------------------------------------------
>     YAHOO! GROUPS LINKS 
> 
>       a..  Visit your group "development-axapta" on the web.
>         
>       b..  To unsubscribe from this group, send an email to:
>        [EMAIL PROTECTED]
>         
>       c..  Your use of Yahoo! Groups is subject to the Yahoo! Terms of 
> Service. 
> 
> 
>   
> ------------------------------------------------------------------------------
> 
> 
> 
>   [Non-text portions of this message have been removed]
> 
> 
> 
> 
> 
> 
>   Yahoo! Groups Links
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>   SPONSORED LINKS Computer part  Programming languages  Microsoft axapta  
>         Support exchange  
> 
> 
> ------------------------------------------------------------------------------
>   YAHOO! GROUPS LINKS 
> 
>     a..  Visit your group "development-axapta" on the web.
>       
>     b..  To unsubscribe from this group, send an email to:
>      [EMAIL PROTECTED]
>       
>     c..  Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. 
> 
> 
> ------------------------------------------------------------------------------
> 
> 
> 
> [Non-text portions of this message have been removed]
> 
> 
> 
> 
> 
>  
> Yahoo! Groups Links
> 
> 
> 
>  
> 
> 
> 
> 
> 
> 
>  
> Yahoo! Groups Links
> 
> 
> 
>  
> 
> 
> 
> 
>  
> Yahoo! Groups Links
> 
> 
> 
>  
> 
> 
> 





 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/development-axapta/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 



Reply via email to