Reducing read time for reading DS18B20 temp sensors
Doing a search every time is quite inefficient. The search function is for if you don't know the device address - and it takes a while to do. In your case, presumably the addresses will never change. Find the addresses and hard-code them into your code. Or if that isn't practical, store them in EEPROM. And if even that isn't practical find the addresses once in setup.



Next, you need a delay while you take the temperature readings. Why not parallel those up? In a loop, tell all the devices to take a reading. Then wait one second. Then read them all (in another loop). That way the one-second delay is shared between all your sensors.

However from the page Gerben linked:


  And it is NOT possible to run DS1820 sensors on a simple pull-up resistor. During the "Conversion" phase, it needs more power. And there are Application Note discussing this in length. 


That suggest that if you are using parasitic power, my suggestion won't work too well (having multiple devices taking readings would make it worse).



I found this code on my disk from a couple of years ago. There don't seem to be any delays between reading sensors. There is a delay at the end of the main loop, mainly to stop spamming the serial monitor.

Notice the comment:


  Call sensors.requestTemperatures() to issue a global temperature request to all devices on the bus


See if that works for you.

#include &lt;OneWire.h&gt;
#include &lt;DallasTemperature.h&gt;
#include &lt;Streaming.h&gt;

// Data wire is plugged into port 10 on the Arduino
const byte ONE_WIRE_BUS = 10;
const byte TEMPERATURE_PRECISION = 10;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&amp;oneWire);

// arrays to hold device addresses
DeviceAddress myThermometer [10];
int deviceCount;

void setup(void)
{

  // start serial port
  Serial.begin (115200);
  Serial &lt;&lt; "Dallas Temperature IC Control Library Demo" &lt;&lt; endl;

  // Start up the library
  sensors.begin();

  // locate devices on the bus
  Serial &lt;&lt; "Locating devices..." &lt;&lt; endl;
  deviceCount = sensors.getDeviceCount();

  Serial &lt;&lt; "Found " &lt;&lt; deviceCount &lt;&lt; " devices." &lt;&lt; endl;

  // report parasite power requirements
  Serial &lt;&lt; "Parasite power is: " &lt;&lt; (sensors.isParasitePowerMode() ? "ON" : "OFF") &lt;&lt; endl; 

  // method 1: by index

  for (int i = 0; i &lt; deviceCount; i++)
  {
    if (sensors.getAddress(myThermometer [i], i))
    { 
      Serial &lt;&lt; "Device " &lt;&lt; i &lt;&lt; " Address: ";
      printAddress(myThermometer [i]);
      Serial &lt;&lt; endl;
      sensors.setResolution(myThermometer [i], TEMPERATURE_PRECISION);
    }
    else
      Serial &lt;&lt; "Unable to find address for Device " &lt;&lt; i &lt;&lt; endl;
  }  // end of for loop

}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i &lt; 8; i++)
  {
    // zero pad the address if necessary
    if (deviceAddress[i] &lt; 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}


void loop(void)
{ 

  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  sensors.requestTemperatures();

  // now get all temperatures
  for (int i = 0; i &lt; deviceCount; i++)
  {
    float tempC = sensors.getTempC(myThermometer [i]);
    if (tempC &gt; -80)
    { 
      Serial &lt;&lt; "Device " &lt;&lt; i &lt;&lt; " Temperature: " &lt;&lt; tempC &lt;&lt; endl;
    }
    else
      Serial &lt;&lt; "Unable to find temperature for Device " &lt;&lt; i &lt;&lt; endl;
  }  // end of for loop

  delay (1000);
}