mirror of
https://git.teknik.io/Teknikode/Teknik.git
synced 2023-08-02 14:16:22 +02:00
Optimizations
This commit is contained in:
parent
dc76918300
commit
92ac154619
@ -14,6 +14,7 @@ namespace Teknik.ContentScanningService
|
|||||||
public class HashScanner : ContentScanner
|
public class HashScanner : ContentScanner
|
||||||
{
|
{
|
||||||
private static readonly HttpClient _client = new HttpClient();
|
private static readonly HttpClient _client = new HttpClient();
|
||||||
|
|
||||||
public HashScanner(Config config) : base(config)
|
public HashScanner(Config config) : base(config)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@ namespace Teknik.Areas.Users.Utility
|
|||||||
{
|
{
|
||||||
public static class IdentityHelper
|
public static class IdentityHelper
|
||||||
{
|
{
|
||||||
|
private static HttpClient _httpClient = new HttpClient();
|
||||||
|
|
||||||
public static async Task GetAccessToken(this HttpClient client, Config config)
|
public static async Task GetAccessToken(this HttpClient client, Config config)
|
||||||
{
|
{
|
||||||
var token = await client.GetAccessToken(config.UserConfig.IdentityServerConfig.Authority, config.UserConfig.IdentityServerConfig.ClientId, config.UserConfig.IdentityServerConfig.ClientSecret, "auth-api");
|
var token = await client.GetAccessToken(config.UserConfig.IdentityServerConfig.Authority, config.UserConfig.IdentityServerConfig.ClientId, config.UserConfig.IdentityServerConfig.ClientSecret, "auth-api");
|
||||||
@ -48,10 +50,9 @@ namespace Teknik.Areas.Users.Utility
|
|||||||
|
|
||||||
public static async Task<IdentityResult> Get(Config config, Uri url)
|
public static async Task<IdentityResult> Get(Config config, Uri url)
|
||||||
{
|
{
|
||||||
var client = new HttpClient();
|
await _httpClient.GetAccessToken(config);
|
||||||
await client.GetAccessToken(config);
|
|
||||||
|
|
||||||
var content = await client.GetStringAsync(url);
|
var content = await _httpClient.GetStringAsync(url);
|
||||||
if (!string.IsNullOrEmpty(content))
|
if (!string.IsNullOrEmpty(content))
|
||||||
{
|
{
|
||||||
return JsonConvert.DeserializeObject<IdentityResult>(content);
|
return JsonConvert.DeserializeObject<IdentityResult>(content);
|
||||||
@ -62,11 +63,10 @@ namespace Teknik.Areas.Users.Utility
|
|||||||
|
|
||||||
public static async Task<IdentityResult> Post(Config config, Uri url, object data)
|
public static async Task<IdentityResult> Post(Config config, Uri url, object data)
|
||||||
{
|
{
|
||||||
var client = new HttpClient();
|
await _httpClient.GetAccessToken(config);
|
||||||
await client.GetAccessToken(config);
|
|
||||||
|
|
||||||
|
|
||||||
var response = await client.PostAsJsonAsync(url, data);
|
var response = await _httpClient.PostAsJsonAsync(url, data);
|
||||||
if (response.IsSuccessStatusCode)
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
string content = await response.Content.ReadAsStringAsync();
|
string content = await response.Content.ReadAsStringAsync();
|
||||||
|
@ -248,8 +248,8 @@ namespace Teknik.Utilities.Cryptography
|
|||||||
|
|
||||||
protected override void Dispose(bool disposing)
|
protected override void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
_Cipher.Dispose();
|
|
||||||
_Inner.Dispose();
|
_Inner.Dispose();
|
||||||
|
_Cipher.Dispose();
|
||||||
|
|
||||||
base.Dispose(disposing);
|
base.Dispose(disposing);
|
||||||
}
|
}
|
||||||
|
26
Utilities/PooledArray.cs
Normal file
26
Utilities/PooledArray.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using System.Buffers;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Teknik.Utilities
|
||||||
|
{
|
||||||
|
public class PooledArray : IDisposable
|
||||||
|
{
|
||||||
|
private static ArrayPool<byte> _arrayPool = ArrayPool<byte>.Create();
|
||||||
|
|
||||||
|
public byte[] Array { get; private set; }
|
||||||
|
|
||||||
|
public PooledArray(int size)
|
||||||
|
{
|
||||||
|
Array = _arrayPool.Rent(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_arrayPool.Return(Array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -13,20 +13,22 @@ namespace Teknik.Utilities
|
|||||||
{
|
{
|
||||||
public async static Task StreamToOutput(HttpResponse response, Stream stream, int length, int chunkSize)
|
public async static Task StreamToOutput(HttpResponse response, Stream stream, int length, int chunkSize)
|
||||||
{
|
{
|
||||||
response.RegisterForDisposeAsync(stream);
|
|
||||||
var bufferSize = chunkSize;
|
var bufferSize = chunkSize;
|
||||||
if (length < chunkSize)
|
if (length < chunkSize)
|
||||||
bufferSize = length;
|
bufferSize = length;
|
||||||
Memory<byte> buffer = new byte[bufferSize];
|
var pooledArray = new PooledArray(bufferSize);
|
||||||
|
|
||||||
|
response.RegisterForDispose(stream);
|
||||||
|
response.RegisterForDispose(pooledArray);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int processedBytes;
|
int processedBytes;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
processedBytes = await stream.ReadAsync(buffer);
|
processedBytes = await stream.ReadAsync(pooledArray.Array);
|
||||||
if (processedBytes > 0)
|
if (processedBytes > 0)
|
||||||
{
|
{
|
||||||
await response.Body.WriteAsync(buffer.Slice(0, processedBytes));
|
await response.Body.WriteAsync(pooledArray.Array, 0, processedBytes);
|
||||||
|
|
||||||
await response.Body.FlushAsync();
|
await response.Body.FlushAsync();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user