It does rebroadcast just not at a rate which would be seen as a denial of service attack.
One attempt per 45 minutes to avoid DDOS? You were kidding, right?
There is no preset time limit. The node psuedo-randomly rebroadcasts transactions. Your node has no method of knowing if other nodes are still retaining a copy of your unconfirmed tx, only that a tx is self created and has been broadcast. It broadcasts the tx, and then wait, if it sees the tx in a block it removes it from its memory pool. When a self generated tx in its memory pool becomes stale it broadcasts it again. It is possible peers already know of that tx however it doesn't check it simply broadcasts the tx and refreshes its status in its memory pool.
Spamming a tx to all nodes continually until they appear in a block would use up a lot of network resources and that could be exploited by an attacker as camouflage to create a denial of service attack. In other words if "well behaved" nodes are spammy then it becomes harder to identify and ban truly malicious nodes. As it is right now actual malicious are easy to spot and ban.
Bitcoin is an open source project. The rebroadcast algorithm can be improved so feel free to do a pull (or bounty for a pull).
Keep in mind however that:
a) an node has no method of knowing if an arbitrary unconfirmed tx is in the memory pool of peers without asking
b) when a node drops a tx from its memory pool either on receipt (invalid tx or insufficient fee) or when memory pool is full it does not notify the sending node.
c) a node should rebroadcast tx to peers on random intervals to avoid giving away information (i.e. your node sends the same tx every 1 minute to all 8 peers an a malicious entity is two of your peers you have essentially identified yourself as the originator)
d) the volume of communication should not make it possible for a malicious node to use that as cover to spam the network.