Skip to content

Commit

Permalink
feat(storage): [Perf] allow direct access to the file stream from Fil…
Browse files Browse the repository at this point in the history
…eIO when possible
  • Loading branch information
dr1rrb committed Oct 9, 2020
1 parent b7d58b6 commit bc9540e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/Uno.UWP/Storage/StorageFile.Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public bool IsEqual(IStorageItem item)
public abstract Task<IRandomAccessStreamWithContentType> Open(CancellationToken ct, FileAccessMode accessMode, StorageOpenOptions options);

public virtual async Task<Stream> OpenStream(CancellationToken ct, FileAccessMode accessMode, StorageOpenOptions options)
=> (await Open(ct, accessMode, options)).AsStream();
=> (await Open(ct, accessMode, options).AsTask(ct)).AsStream();

public abstract Task<StorageStreamTransaction> OpenTransactedWrite(CancellationToken ct, StorageOpenOptions option);

Expand Down
11 changes: 9 additions & 2 deletions src/Uno.UWP/System.IO/WindowsRuntimeStorageExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,15 @@ public static async Task<Stream> OpenStreamForReadAsync(this IStorageFolder root

public static async Task<Stream> OpenStreamForWriteAsync(this IStorageFile windowsRuntimeFile)
{
var writeTransaction = await windowsRuntimeFile.OpenTransactedWriteAsync();
return writeTransaction.AsAutoCommitStream();
if (windowsRuntimeFile is StorageFile file)
{
return await file.OpenStream(CancellationToken.None, FileAccessMode.ReadWrite, StorageOpenOptions.None);
}
else
{
var writeTransaction = await windowsRuntimeFile.OpenTransactedWriteAsync();
return writeTransaction.AsAutoCommitStream();
}
}

public static async Task<Stream> OpenStreamForWriteAsync(this IStorageFolder rootDirectory, string relativePath, CreationCollisionOption creationCollisionOption)
Expand Down

0 comments on commit bc9540e

Please sign in to comment.