The profiler should not significantly affect the results of synchronization. If the profilerās overhead is really āsignificant,ā you probably wonāt be able to get much more speed out of your code and should think about finding bottlenecks in your hardware (disk, RAM, or processor?) And upgrades. (It looks like you're connected to the CPU, so where to start)
In general, .net and JIT relieve you of most 64-bit port problems. As you know, there are effects related to the size of the register (changes in memory usage, sorting by its own code, the need for all parts of the program to be built-in 64-bit assemblies) and some differences in performance (large memory card, more registers, more wide tires, etc.), so I canāt tell you anything more than you already know on this front. Other problems that I saw are the OS, and not C # - now there are different registry bushes for 64-bit and WOW64 applications, so some registry calls should be carefully written.
It's generally not good to think about what JIT will do with your code and try to tune it to work better, because JIT is likely to change with .net 4 or 5 or 6, and your āoptimizationsā may turn into inefficiencies or, worse, errors. Also keep in mind that JIT compiles code specifically for the processor it runs on, so a potential improvement on your development PC may not be an improvement on another PC. The fact that you manage to use JIT today on today's processor may bite you in a few years, when you update something.
In particular, you indicate that "properties are not embedded in x64." By the time you run your entire code base, turning all your properties into fields, there may well be a new 64-bit JIT that does the built-in properties. Indeed, it may work better than your "workaround" code. Let Microsoft optimize this for you.
You rightly point out that your memory profile may change. Thus, you may need more RAM, faster disks for virtual memory, and larger processor caches. All problems with the equipment. You can reduce the effect by using (for example) Int32 rather than int, but this may not matter much and could potentially hurt performance (since your processor can process its own 64-bit values āāmore efficiently than half-sized 32-bit values) .
You say that the startup time may be longer, but this seems inappropriate in the application, which, as you say, works for several hours at 100% CPU.
So are you really worried? Perhaps the time of your code is on a 32-bit PC, and then the time when it performs the same task on a 64-bit PC. Is there half an hour difference in 4 hours? Or is the difference just 3 seconds? Or is a 64-bit PC faster? You may be looking for solutions to problems that do not exist.
So, back to the usual, more universal, advice. Profile and time to identify bottlenecks. Look at the algorithms and mathematical processes that you apply and try to improve or replace them with more efficient ones. Make sure your multi-threaded approach helps, and does not harm your performance (i.e., avoids waiting and blocking). Try to reduce memory allocation / deallocation - for example, to reuse objects, rather than replace them with new ones. Try to reduce the use of frequent function calls and virtual functions. Switch to C ++ and get rid of the overhead of garbage collection, border checking, etc. that .net imposes. Hmmm. None of this has anything to do with 64-bit, right?