(If this doesn't help, then I think you will have to post your own example.)
Random data:
SeedRandom[1]; data = Sort@ Transpose[{{0, 1000}~Join~RandomReal[{0, 1000}, 10000 - 2], RandomReal[{-5, -4}, 10000 - 100]~Join~RandomReal[{4, 5}, 100]}]; ifn = Interpolation[data]
For the integrand I'll use ifn[x]^2. It does have about 100 spikes randomly placed:
Plot[ifn[x]^2, {x, 0, 100}, PlotRange -> {0, 100000}, PlotPoints -> 200]

A naive application of NIntegrate complains:
NIntegrate[ifn[x]^2, {x, 0, 1000}]
NIntegrate::ncvb: NIntegrate failed to converge to prescribed accuracy after 9 recursive bisections in x near {x} = {460.922}. NIntegrate obtained 44561.490415711516and 6980.389951991658 for the integral and error estimates. >>
(* 44561.5 *)
Increasing MinRecursion changes the value -- there must be a problem:
NIntegrate[ifn[x]^2, {x, 0, 1000}, MinRecursion -> 1]
NIntegrate::ncvb:...
(* 54356.8 *)
At MinRecursion -> 3 we get a NIntegrate::slwcon warning, which I take as a good sign and NIntegrate is getting some traction, and the value has crept up to 61409.. At MinRecursion -> 4, the value jumps up to 3.05019*10^8 - wow. There is another way to go...
Using the interpolating function
An InterpolationFunction is basically a piecewise polynomial, a cubic one by default. The method ifn["Grid"] tells you points where the polynomial changes. So if f[ifn[x]] is well-behave (in our case f[t] = t^2), then the following should give good results, perhaps slowly:
NIntegrate[ifn[x]^2, Evaluate@Flatten@{x, ifn["Grid"]}] // AbsoluteTiming (* {8.024718, 2.07559*10^9} *)
If the spikes are infrequent, we might be able to get away skipping some of the grid points, since NIntegrate is probably using the Gauss-Kronrod rule. How much we can skip will depend on where the spikes are and the integrand. It's hard to give a good rule of thumb. The more we skip, the more likely that NIntegrate will have to recursively subdivide some parts of the domain of integration. In this particular case, skipping every 10 works and speeds the calculation up by a factor of 8.
skip = 10; NIntegrate[ifn[x]^2, Evaluate@Flatten@{x, 0, ifn["Grid"][[2 ;; -2 ;; skip]], 1000}] // AbsoluteTiming (* {0.999823, 2.07559*10^9} *)
Back to MinRecursion
We have to bump MinRecursion up to 10 to get a good result, that's still a wee bit off.
NIntegrate[ifn[x]^2, {x, 0, 1000}, MinRecursion -> 10, MaxRecursion -> 20] // AbsoluteTiming (* {3.825013, 2.07558*10^9} *)
At MinRecursion -> 7 it converges to NIntegrate's satisfaction, but the value 2.07401*10^9 is not too good.
Hope that helps.
NIntegrate[f[x], {x, a, x1,x2, x3, ..., b}]. Also tryIntegrate[f[x], {x, a, b}], if it's anInterpolatingFunction. $\endgroup$f[x]is not anInterpolatingFunction, then perhapsMinRecursion -> 2or whatever lowest number works. There are other parameters to play with, described in "tutorial/NIntegrateIntegrationRules" and elsewhere. $\endgroup$