Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 03/22/21 in all areas

  1. No because the algo as I described is one pass, different from simply running ReplaceStr in a loop where subsequent replacements work on an altered input! Replace('Jabba the Hutt lived in a Hut', ['Hutt', 'Hut'], ['Alien', 'House']) would produce the same as would Replace('Jabba the Hutt lived in a Hut', ['Hut', 'Hutt'], ['House', 'Alien']) because finding the first 'Hut' from 'Hutt' would not eat the replacement to 'House' but continue and find a better match 'Hutt' to be replaced with 'Alien' and then be done with it.
  2. Until a few months ago, I also depended on BCB6 for my full-time job (my software has reached its End-Of-Life, so this is no longer an issue), but in the past 15-odd years, moving it into a VM was never really an option. The physical machine it ran in was over 500GB of logs, databases, backups, etc, so cloning it would have taken forever. But more importantly, it had specialized PCI hardware installed that didn't work inside a VM, and I never had the time to create a new VM with just BCB6 installed. I would have had to continue running my apps on the physical machine, but used the remote debugger inside a VM, and I wasn't too keen on that approach, either,
  3. We are excited to announce to the community that the new Deleaker 2020.16 with full RAD Studio 10.4 Sydney is available to download. Deleaker is a famous tool to find leaks, leaked objects and memory, GDI resources, and handles. This is a good addition to a favorite IDE for everyone who wants to explore resource usage and fix leaks without leaving RAD Studio. For those who prefer to watch, we've recorded a video to show how it works: Happy coding!
  4. It is so great to hear that Deleaker was quick and was useful! Thank you!
  5. Probably, but not in so big numbers as it could be if MM wouldn't reserve space at all. In most cases, the more specific an algo is, the more it could be optimied for speed because you can make some assumptions that reduce conditions. F.ex., generic string replace, even pretty optimized on ASM, being used for replacing one char with another would be likely beaten by dumb "for ch:=1 to Length(Src) if Src[ch] = CharFrom then Dst[ch] := CharTo else Dst[ch] := Src[ch]" @Mike Torrettinni if your goal is just to remove HTML entities, better utilize specific routine where you could make these assumptions: - Result will always be shorter than source. So allocate space for result once at the beginning and truncate it to actual length in the end - List of entities is standardized. You can hardcode them for better performance -- Any non-ASCII char after & and before ; should be skipped -- possible set of distances from & to ; is known beforehand -- convert input char (you already ensured it's ASCII alpha) to fixed case with simple bitwise operation to reduce ranges -- Use "case 'a'..'z'" instead of CharInSet -- some more hard optimizations that make code too specific but very fast - Flow prediction could play big role as well. In good HTML there won't happen a & that's not an entity so "if currChar = '&' and IsEntity then ... else Continue" could outperform "if currChar = '&' and (not IsEntity) then Continue" - The more you optimize your code, the less readable/universal/pretty it becomes 😞
  6. In fact, FastMM already reserves some space for dynarrays and strings making StringBuilder nearly useless. SB would benefit if it cached added strings to some internal array and only flushed them to final buffer when needed but it's not the case currently
  7. Found it send me your mail P.S I remember that the info was in the registry so you can scan it
  8. Hi All Some changes with the IDE integration this week. I was unsatisfied with how the IDE plugin behaved when working with large project groups, because the Messages View doesn't show until the project group has loaded. When restoring the first time on a machine that didn't have the packages, this resulted in a potentially long period (depending on how many packages need to be installed/compiled) where no status info is available to what's going on, making it appear as though the IDE had hung. So I decided to use a window (not modal) to show the log view as the projects are loading and packages restoring. I created a custom LogMemo component to show this since I couldn't find one that suited - fortunately I already had some code to base it off (VSoft.VirtualListView). The log window will auto close after a few seconds if the restore/install/uninstall succeeds, you can configure that auto close time in the options. I also added options so you can control when the log view shows. Lastly, I added an option to not add DPM nodes to the project manager tree. On large project groups (the FinalBuilder project group has over 100 projects) it causes a long delay before the IDE is ready to use. This is because of how I had to hack into the IDE to add the nodes, the code is not at all efficient. When time permits I'll revisit this and see if I can find a better way. https://github.com/DelphiPackageManager/DPM/releases/tag/v0.1.63-alpha
  9. Vincent Parrett

    DPM Package Manager Progress - 15 March 2021

    Hi All As a follow up to the previous post, I have uploaded a new build : https://github.com/DelphiPackageManager/DPM/releases/tag/v0.1.64-alpha This build has a dramatic performance improvement when it comes to adding nodes to the Project Manager tree - it now has very little impact on project load times. Achieved by caching Rtti.
×