@@ -182,9 +182,9 @@ public async Task<ReadOnlyCollection<ProductRelease>> GetReleasesAsync(string pa
182182 {
183183 await Utils . GetLatestFileAsync ( path , downloadLatest , ReleasesJson ) . ConfigureAwait ( false ) ;
184184
185- using TextReader reader = File . OpenText ( path ) ;
185+ using FileStream stream = new FileStream ( path , FileMode . Open , FileAccess . Read , FileShare . Read , bufferSize : 4096 , useAsync : true ) ;
186186
187- return await GetReleasesAsync ( reader , this ) . ConfigureAwait ( false ) ;
187+ return await GetReleasesAsync ( stream , this ) . ConfigureAwait ( false ) ;
188188 }
189189
190190 /// <summary>
@@ -201,9 +201,8 @@ public async Task<ReadOnlyCollection<ProductRelease>> GetReleasesAsync(Uri addre
201201 }
202202
203203 using var stream = new MemoryStream ( await Utils . s_httpClient . GetByteArrayAsync ( address ) . ConfigureAwait ( false ) ) ;
204- using var reader = new StreamReader ( stream ) ;
205204
206- return await GetReleasesAsync ( reader , this ) . ConfigureAwait ( false ) ;
205+ return await GetReleasesAsync ( stream , this ) . ConfigureAwait ( false ) ;
207206 }
208207
209208 /// <summary>
@@ -224,19 +223,19 @@ public bool IsOutOfSupport()
224223 /// <returns>A collection of releases. The releases are not linked to a specific <see cref="Product"/>.</returns>
225224 public static async Task < ReadOnlyCollection < ProductRelease > > GetReleasesAsync ( string path )
226225 {
227- using TextReader reader = File . OpenText ( path ) ;
226+ using FileStream stream = new FileStream ( path , FileMode . Open , FileAccess . Read , FileShare . Read , bufferSize : 4096 , useAsync : true ) ;
228227
229- return await GetReleasesAsync ( reader , null ) . ConfigureAwait ( false ) ;
228+ return await GetReleasesAsync ( stream , null ) . ConfigureAwait ( false ) ;
230229 }
231230
232- private static async Task < ReadOnlyCollection < ProductRelease > > GetReleasesAsync ( TextReader reader , Product product )
231+ private static async Task < ReadOnlyCollection < ProductRelease > > GetReleasesAsync ( Stream stream , Product product )
233232 {
234- if ( reader == null )
233+ if ( stream == null )
235234 {
236- throw new ArgumentNullException ( nameof ( reader ) ) ;
235+ throw new ArgumentNullException ( nameof ( stream ) ) ;
237236 }
238237
239- using var releasesDocument = JsonDocument . Parse ( await reader . ReadToEndAsync ( ) . ConfigureAwait ( false ) ) ;
238+ using var releasesDocument = await JsonDocument . ParseAsync ( stream ) . ConfigureAwait ( false ) ;
240239 JsonElement root = releasesDocument . RootElement ;
241240 var releases = new List < ProductRelease > ( ) ;
242241 var enumerator = root . GetProperty ( "releases" ) . EnumerateArray ( ) ;
0 commit comments