Here's how subreports work - The sub-report query DOES NOT pull all of the data and cache it in memory to filter for each time a subreport is rendered, instead the query is run with the filter on the where clause EVERY TIME the subreport is rendered. So, if you're not using the "Page N of M" or "Total Page Count" special fields, what you're seeing is the subreport runs for every section it's in on the page that's being shown. When you move to another page, it runs again for every section it's in on this new page.
If you're using "Page N of M" or "Total Page Count", the queries may get run twice for each. The first time when you initially run or refresh the report because each page has to be rendered in order for Crystal to know how many pages there are and possibly the second time when the page is displayed.
So, unless it's absolutely unavoidable, you have a small result set, or you're placing the subreport in a non-details section that doesn't appear many times on a report, it's best to find a way around using a subreport. If there's no way to do what you need to without a subreport in the details, you need to be prepared to deal with the way they slow down your report.
-Dell