柏林版的隱藏功能

還記得在Delphi 3的時代有一本相當有名的書籍” Hidden Paths of Delphi 3: Experts, Wizards and the Open Tools API”,它討論了當時Delphi 3一些鮮為人知的功能, 非常的有趣. 不過我今天並不是要著墨這本書, 而是因為柏林版推出後大多數為人熟知的新功能就是就的安裝程式, IoT的新功能以及新的C++編譯器.不過柏林版也有一些人們忽略的好康, 就像是隱藏版的功能一樣, 今天就讓我們看看有些什麼看不見的好東西.

我有個多年的習慣就是在安裝新版的Rad Studio之前都會把前一版的原始程式保留下來並和新版的原始程式比較, 研究之用. 在安裝完柏林版之後就可以很方便的啟動Beyond Compare來比較, 研究有興趣的程式碼:

Snap2

例如柏林版提到了StrReplace和一些其他功能改善, 然而言語之間很模糊,我也不太清楚真正的改善是什麼, 因此我就使用Beyond Compare直接來比較, 發現柏林版許多的RTL都有改寫的跡象, 例如下圖就是使用Beyond Compare來比較StrReplace:

Snap1

而發現了巨大的改變. 如果我們在IDE中搜尋StrReplace在RTL/VCL/FMX中使用的情形可以發現StrReplace是一個熱點函式, 也就是說StrReplace是被大量使用的函式:

Snap3

而且String的helper class也大量的使用了StrReplace:

function TStringHelper.Replace(OldChar, NewChar: Char): string;

begin

  Result := System.SysUtils.StringReplace(Self, OldChar, NewChar, [rfReplaceAll]);

end;

 

function TStringHelper.Replace(OldChar: Char; NewChar: Char; ReplaceFlags: TReplaceFlags): string;

begin

  Result := System.SysUtils.StringReplace(Self, OldChar, NewChar, ReplaceFlags);

end;

 

function TStringHelper.Replace(const OldValue, NewValue: string): string;

begin

  Result := System.SysUtils.StringReplace(Self, OldValue, NewValue, [rfReplaceAll]);

end;

嗯, 這代表如果柏林版改善了StringReplace函式那麼就代表幾乎所有有使用到字串處理的程式都會得到助益, 但我們並不知StringReplace到底改善了多少? 柏林版的StringReplace到底有沒有比以前版本的StringReplace好呢?

要找答案很簡單, 寫一個大量使用StringReplace的範例程式比較一下不就得了?如果只是改善3~5%, 那就…..

下面是同樣的程式, 只是一個用西雅圖版編譯, 一個用柏林版編譯.這支程式在一個公開的電子書中呼叫StringReplace來取代字串, 下面執行的結果可能會令人大吃一驚, 因為柏林版的StringReplace比西雅圖版快上數百倍, 令人印象深刻:

Snap4

嗯, 柏林版的這個隱藏功能太棒了, 當你處理字串資料的應用程式使用柏林版重新編譯之後您有沒有發現執行速度似乎變快了呢? Have Fun!

 

 

廣告
  1. #1 by chonghai on 2016 年 06 月 17 日 - 07:06:50

    希望李大师能经常写文章以飨读者。
    谢谢!

    • #2 by gordonliwei on 2016 年 06 月 23 日 - 09:43:26

      老了, 應該是其他Delphi好手要多寫了, 呵呵.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: