Applied Patch from Bernd which uses a hash list instead of a StringList for css elements. This causes a big improvment in scrolling speed.

git-svn-id: trunk@34400 -
This commit is contained in:
andrew 2011-12-25 03:38:41 +00:00
parent 6c8ac2b3c8
commit d84fb4ec3e
2 changed files with 20 additions and 15 deletions

View File

@ -96,7 +96,7 @@
{ TCSSGlobalProps }
TCSSGlobalProps = class
FElements: TStringList;
FElements: TFPObjectHashTable;
public
constructor Create;
destructor Destroy; override;
@ -482,6 +482,7 @@ begin
end;
end;
{ TCSSReader }
function TCSSReader.GetStatementElements(AStatement: String): TStringList;
@ -870,15 +871,13 @@ end;
constructor TCSSGlobalProps.Create;
begin
FElements := TStringList.Create;
FElements := TFPObjectHashTable.Create(True);
end;
destructor TCSSGlobalProps.Destroy;
var
i: Integer;
begin
for i := 0 to FElements.Count-1 do
FElements.Objects[i].Free;
FElements.Free;
inherited Destroy;
end;
@ -889,21 +888,26 @@ var
ElementName: String;
procedure LookForElement(const aElement: string);
var
ElementIndex: Integer;
begin
if length(ClassID) > 0 then
ElementName := Lowercase(aElement+'.'+ClassId)
ElementName := aElement + '.' + ClassId
else
ElementName := lowercase(aElement);
ElementIndex := FElements.IndexOf(ElementName);
if ElementIndex>=0 then begin
result := TCSSProps(FElements.Objects[ElementIndex]);
end;
ElementName := aElement;
// The element names are already lowercase, this is
// already done in the css parser. And the html parser
// can only deliver its own built-in node names anyways.
// Also the names are not expected to be longer than
// ShortString (this would need to be a ridiculously
// long ClassID), should this ever happen then
// it would be silently truncated in the following
// type conversion to ShortString.
{$warning GetElement() is called a *lot* of times, this
is one of the hot spots, maybe some of the AnsiString
usage around here could be avoided a little bit}
Result := TCSSProps(FElements.Items[ElementName]);
end;
begin
Result := nil;
if (length(ClassID) = 0) and (length(AElementID) = 0) then
@ -916,7 +920,7 @@ begin
if (Result = nil) and CreateIfNotExist then
begin
Result := TCSSProps.Create;
FElements.AddObject(ElementName, Result);
FElements.Add(ElementName, Result);
end;
end;

View File

@ -63,6 +63,7 @@ uses
Translations,
FileUtil,
LConvEncoding,
contnrs,
{$ELSE}
Windows,
{$ENDIF}