51 lines
1.7 KiB
C#
Executable File
51 lines
1.7 KiB
C#
Executable File
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
namespace Shadowsocks.Util
|
|
{
|
|
public class Utils
|
|
{
|
|
public static void ReleaseMemory()
|
|
{
|
|
// release any unused pages
|
|
// making the numbers look good in task manager
|
|
// this is totally nonsense in programming
|
|
// but good for those users who care
|
|
// making them happier with their everyday life
|
|
// which is part of user experience
|
|
GC.Collect(GC.MaxGeneration);
|
|
GC.WaitForPendingFinalizers();
|
|
SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle,
|
|
(UIntPtr)0xFFFFFFFF, (UIntPtr)0xFFFFFFFF);
|
|
}
|
|
|
|
public static string UnGzip(byte[] buf)
|
|
{
|
|
byte[] buffer = new byte[1024];
|
|
int n;
|
|
using (MemoryStream sb = new MemoryStream())
|
|
{
|
|
using (GZipStream input = new GZipStream(new MemoryStream(buf),
|
|
CompressionMode.Decompress, false))
|
|
{
|
|
while ((n = input.Read(buffer, 0, buffer.Length)) > 0)
|
|
{
|
|
sb.Write(buffer, 0, n);
|
|
}
|
|
}
|
|
return System.Text.Encoding.UTF8.GetString(sb.ToArray());
|
|
}
|
|
}
|
|
|
|
[DllImport("kernel32.dll")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
private static extern bool SetProcessWorkingSetSize(IntPtr process,
|
|
UIntPtr minimumWorkingSetSize, UIntPtr maximumWorkingSetSize);
|
|
}
|
|
}
|