I got to agree. Using delay() is shooting yourself in the foot. Learn Blink Without Delay.
You can read the port bits using bitRead(). If it's a lot the same bit then this is a good choice.http://arduino.cc/en/Reference/BitRead
You can read a whole port http://www.arduino.cc/en/Reference/PortManipulation
and get... on an UNO I use 6 pins per port, the pin map explains why best:http://arduino.cc/en/Hacking/Atmega168Hardware
the crystal uses Port B pins 6 and 7. Port C pin 6 is reset. Port D pins 0 and 1 are UNO RX and TX. So I don't aim at more than 6 without resorting to shift registers, and then I can have a great many pins that I can read or write using only 4 Arduino pins plus power and ground, and external power for the chips, they can drive leds if you want, but don't forget the resistors!
I got 8-bit bi-directional shift registers, can select which direction serial <---> parallel the data flows, from Futurlec for maybe a dollar each, maybe less.
Shift registers on SPI can run in 1 or 2 meg/sec bursts. Changing 32 bits/pins at that speed don't take long. And because the register has a latch you read all the pins simultaneous until next latch.
You can read the port into a variable and read the low bit, shift right, repeat X times and there's your bits. What you do with them, do it right inside the read-shift-repeat cycle. You can run it in microseconds, I bet less than 100 usec if the what to do is kept short. Analog read takes 104 usec.