Optical Encoder with Sharp IR Sensor: Sending to much information?

I'm creating an optical encoder to be used with a training bicycle. The wheel is solid so the ir sensor is reading reflecting light coming off the wheel and not light making it through the wheel. There are alternating spaces of black and white that reflect different amounts of light. I've written code and tried it and everything seems to work great except for when i take the delay out at the very end.

I feel this might be an issue becasue the wheel is going to be rotating at very high speeds and i'm not sure if or how much the delay is effecting. I found that need to read at about 250 Hz*Pulses. Pulses being each space on the wheel (i.e if there are 9 black and 9 white alternating spaces there are 18 pulses). With that i found that i need to be able to read 250 pulses/second. From the analogRead page, Arduino says that they can read an analog signal in 100 microseconds meaning they could read around 2500 pulses/second but I'm not sure if this is true for all arduinos.

The issue i get is that when i run the code without the delay, values are printed to the serial monitor even though the sensor and wheel are completely still. The values the sensor should be reading at this time should be a constant and stall the code. But this only happens when i dont have a delay. With the current delay in the code, it works perfect though. There is not random numbers printed to the serial monitor and it writes proper values when it should.

My overall question is, does it sound like my code should work? With or without the delay? Could it be the ir sensor i am using? I'm just not sure why it works with a delay but not without one. I've posted the code i am using for reference. Thank you for any help you might be able to provide.

//Justin Tsuyuki
//Optical Endocer Code II

//User Changeable Variables
int desiredRevs = 10;
int WheelResolution = 10;

//DO NOT CHANGE ANYTHING BEYOND THIS POINT
int SensorPin = A0;                      //analog pin sensor is attached to 
unsigned long time1 = 0;
unsigned long time2 = 0;
unsigned long time3 = 0;
int Color = 0;                            //primary condition
int desiredPulses = (WheelResolution * desiredRevs)/2;
unsigned long val = 0;
int Sequence = 0;                         //secondary condition; 1 = beginning of first black, 2 = beginning of white
int status1 = 0;
unsigned long deltaT = 0;
int pulses = 0;



void setup()
{
  pinMode(SensorPin, INPUT);
  Serial.begin(9600);

}

void loop()
{
  while (pulses <= desiredPulses)        //continue running program til i have reached the desired limit
  {
    val = analogRead(SensorPin);        //read analog pin value
    if (val <= 200)                      //if value is less than 200 (white section) enter if statement
    {
      Color = 1;                          //classify flag=1 for primary condition
      if (Color == 1 && Sequence == 0)      //if both of these conditions are satisfied we are in the first white space 
        //and the program should begin the rest of the sequence
        //This part of the code is only required for one purpose: to 
        //make sure we begin in a white section and not in a black section
      { 
        Sequence = 1;                      //change secondary condition to recongize next black section and not repeat reading 
        //the white section it is in
        time1 = micros();                //take time when it first enters white section
      }
      else if (Color ==1 && Sequence == 2)  //when both of these conditions are met we know 1 of 2 things: first we know that we have gone
        // from the begining of the very first white section read to the beginning of the next white 
        //section on the encoder; or, second we know that we have proceeded from the beginning of 
        //any previoius white section read to the beginning of the next white section on the encoder
        //in both situations this is the point at where we will calculate the difference between 
        ///the time it took from one white section to the next
      {
        time3 = micros();                //Take final time reading
        deltaT = time3 - time1;          //calculate difference from previous time to this one
        Sequence = 1;                    //revert secondary condition to correspond with next black section
        time1 = time3;                   //reset time 1 to be equal to this latest time we have read
        pulses = pulses + 1;             //add 1 to value of pulses so we will read our desired pulses and not have an infinite loop
        Serial.println(deltaT);          //print the time difference to the serial monitor
        Serial.println(pulses);          //print the # of pulses gone through thus far
      } 
    }
    else                                 //if the sensor value is greater than 200 we know it is in a black section and this part 
    //of the code is relevant
    {
      Color = 0;                          //set primary condition
      if (Color == 0 && Sequence == 1)      //If the code begins in a black section this will not effect anything because both flag 
        //and couple will be 0, the code will skip this entire statement and proceed until 
        //it reaches the first white section if we are reading this section after a previous 
        //white section is read than this condition will be met and couple will change to 2 
        //and for the rest of the code the only statements that will matter will be 
        //this one and the else if statement inside the previous if statement
      {
        Sequence = 2;                      //initialize sequence to 2       
      }
    }
    delay(10);                           //!!!!!!!!!!!!!!!! THIS DELAY IS WHERE I HAVE THE QUESTIONS, I AM DELAYING THE CODE FOR 10 
    //MILLISECONDS INBETWEEN READINGS BUT IF I TAKE OUT THIS DELAY THEN THE CODE GOES 
    //CRAZY AS DESCRIBED!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  }
}