Jump to content

chkaufmann

Members
  • Content Count

    158
  • Joined

  • Last visited

Community Reputation

17 Good

Technical Information

  • Delphi-Version
    Delphi 11 Alexandria

Recent Profile Visitors

7813 profile views
  1. Since some years there is the unit IOUtils.pas. There are many duplicated functions: ExtractFileExt() - TPath.GetExtension() ExtractFileName() - TPath.GetFileName() FileAge() - TFile.GetLastWriteTime() My code uses SysUtils.pas in most places, and I'm not sure if I should change this to use the functions from the new unit IOUtils.pas because the others will be deprecated at some point? And is there a comparisation table anywhere? It looks like not all functions work exactly the same way especially when it comes to throw exceptions. Christian
  2. chkaufmann

    Delphi 12.2 Patch 1

    I can't find this one anymore in the portal. Does it mean, it was fixed?
  3. chkaufmann

    Use TIdHTTPServer.Contexts for monitoring

    You mean get that exception? Maybe it's only when run the code with break points in the debugger. Anyway, it works fine now and get the details for my monitor functionality.
  4. chkaufmann

    Use TIdHTTPServer.Contexts for monitoring

    Thanks for the details. It seems, there are two connections when I send a GET request with postman. But in the first one I end method TIdIOHandler.RaiseConnClosedGracefully. When I test with the Chrome browser, there is only one context / connection. Christian
  5. chkaufmann

    Use TIdHTTPServer.Contexts for monitoring

    I try to use my own subclass for TIdServerContext to monitor the requests to my server. Now I sent a simple GET request with Postman to my server and noticed, that two context objects were created, but the OnCommandGet event is only called once. What is the reason for that? Then I plan to iterate all current requests like this: tmpList := IdHTTPServer1.Contexts.LockList; for i := 0 to tmpList.Count -1 do begin tmp := TMyContext(tmpList[i]); // read some info from tmp end; IdHTTPServer1.Contexts.UnLockList; Can I be sure, that all items will be alive. Or is it possible, that one of the context items was freed before I could read info from it? Christian
  6. I have a question regarding memory usage for strings. When I load a big number of persons, there are many hundred with the same name. Is this handled automatically so that there will be only one copy of the string for a certain name or should I write my own code for this? Or does it depend how the strings are loaded and to what kind of variable these are assigned? I didn't find a good source to read about this topic. Any hints for that? Thanks Christian
  7. chkaufmann

    What are the performance profilers for Delphi 12?

    Just a question regarding Nexus Quality Suite: I looked at it some years ago and I noticed, if you have a big project, the performance for Line Timer / Method Timer was not very good when configuring which methods to trace and which not. Was there an improvement in this regard? And by the way: AQTime was a perfect profiler, I really miss it. Then it was aquired by SmartBear and since then it's terrible because the only improvement of the product they made was adding more and more annoying registration code. Christian
  8. chkaufmann

    SFTP Support

    Unfortunately Indy TIdFTP Client does not support SFTP. The discussions about this I found are already some years old. Is there a chance this will be added? And if not, what is a good alternative? I need something that can be fully integrated in my application so that it works for users who can just enter a servername, username and password. Christian
  9. chkaufmann

    Avoid parameter evaluation

    Clipper and I think Smalltalk had anonymous methods as well. And this at the time when Java was not even born. Christian
  10. chkaufmann

    Threadvar "per object"

    The TBSItemProvider objects are used by any thread. And what David writes will work. I was thinking of something like this as well. The question for me is, how to do the cleanup: Either I have to call a function at the end of each thread or is there a global place to do this? Christian
  11. chkaufmann

    Threadvar "per object"

    This is my use case. TBSItemProvider = class(TBSManagedInterface) strict private FNotificationCache : Integer; FNotificationCaches : IBSList<TNotifyCacheItem>; public procedure DisableNotifications; procedure EnableNotifications; end; My application has 1-n objects of type TBSItemProvider. Basically this is used to handle the records of one database table. Normally the provider distributes messages/notifications after each insert/update/delete operation of one item. When a thread changes many items, I call DisableNotifications and in this case, notifications are cached in FNotificationCaches. So this is the reason these two private variables should be "per thread". Christian
  12. I have a class TProvider where I create 1-n instances in my application. Now I need a threadvar for each instance. The number of instances will never be more than up to 50 objects. What is a good pattern to create a temporary data block per thread/object? Regards Christian
  13. chkaufmann

    Sports and Swimming Software

    I would be interested to know if anyone in these forums also deals with software for swimming and sports written in Delphi. Christian
  14. chkaufmann

    Profiler for Delphi

    Thanks for your instructions. I did like this, but when I call map2pdb I get a long list of errors. For example I get many lines like "Debug: Module has no source files: xxxxxxx" where xxxxxxx is the name of a unit, that is part of the project. Then the only thing I can start in VTune is "Hotspots". This runs fine and at the end I get a summary report. But this is not really helpfull since the "Top Hotspots" are Windows calls only. Using the Caller/Callee I can find my units, but when I open I don't see a lot: Percentage is there, CPU Time is zero most of the times and I don't see the number of calls. I used AQTime before, but support and I have no working version anymore. They had a call tree and a graphic where you could easily navigate down all routines. Maybe I just didn't find the correct view in VTune yet. My questions - Should I care about these errors when creating the pdb file? How to understand the error and how to solve it? - Where can I find a good tutorial for VTune in order to get the info I used before with AQTime? Thanks for any help Christian
  15. I'm using Superobjects to handle JSON data. Now I have to handle a result, where there are identifiers with dots: { "splash.annually": "normal" } This library cannot handle this data because it looks at "splash.annually" as path. Can somebody recommend me another library? What I like with Superobjects: It is fast and it offers reference counted object handling using interfaces. Regards Christian
×