J. Riesmeier wrote:
However, you will need to avoid the DICOM transfer protocol, since it is grotesquely inefficient.
I'm sorry but I don't agree. It's mainly a question of the implementation / configuration. Many systems were not designed for transferring huge amounts of data / objects (sometimes because of historical reasons). E.g. asynchronous communication might be a good idea
The problem is that the DICOM transfer protocol was not designed in a way that allows you to implement it efficiently. Too many useless layers of abstraction getting in the way. On a modern OS, you will want to try very hard to utilize zero-copy semantics to avoid moving buffers around and stream everything in as few operations as possible. DICOM, however, really wants everything hacked into arbitrary pieces and encourages re-conversion rather than a streamlined workflow. (Who thought it was a good idea to add a packet interface on top of a stream-oriented protocol (TCP), when you want to interpret it as a stream again on receipt anyway?)
What does all the abstraction buy you in the end? There is no support for transactions, caching, redirection, authentication, or load balancing. Reporting and error handling is anywhere from weak to non-existent.
Sorry about the rant. I have been experimenting a bit with the protocol lately, and it has not been pleasant