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/

