The docs for the "-ReadCount" parameter say:

-ReadCount <Int64>
	Specifies how many lines of content are sent through the pipeline at a
	time. The default value is 1. A value of 0 (zero) sends all of the content
	at one time.

	This parameter does not change the content displayed, but it does affect
	the time it takes to display the content. As the value of ReadCount
	increases, the time it takes to return the first line increases, but the
	total time for the operation decreases. This can make a perceptible
	difference in very large items.

ReadCount *does* change the content -- it changes the return type of
Get-Content from a single item to an array. Whythefuck it can't just send
however many lines of text through as a string or whatever... or who cares how
many you read at a time, but don't change what you send through the pipe?

Anyway, it causes this common gotcha/problem:

objective: grep-like behaviour, searching a file for a string and returning
lines that contain that string.

# works as expected, but extremely slow (takes 50-70 times as long as grep):
gc somefile.txt | % { if($_ -match "somestring") {write-output $_} }

# only takes 4 times as long as grep, but returns many non-matching lines,
# because the matching is now per-chunk rather than per line:
gc -readcount 1000 somefile.txt | % { if($_ -match "") {write-output $_} }

# only takes 4 times as long as grep, works as expected:
gc somefile.txt -ReadCount 1000 | foreach-object {$_ -match "somestring"}