あなたはWin32_OperatingSystem
classのインスタンスを取得し、FreePhysicalMemory
またはTotalVisibleMemorySize
の特性を離れてあなたのメモリの計算をベースにWMIを使用することができます。
static ulong GetAvailableMemoryKilobytes()
{
const string memoryPropertyName = "FreePhysicalMemory";
using (ManagementObject operatingSystem = new ManagementObject("[email protected]"))
return (ulong) operatingSystem[memoryPropertyName];
}
static ulong GetTotalMemoryKilobytes()
{
const string memoryPropertyName = "TotalVisibleMemorySize";
using (ManagementObject operatingSystem = new ManagementObject("Win32_OperatingSystem=@"))
return (ulong) operatingSystem[memoryPropertyName];
}
その後拡張するために、このような方法に方法のいずれかの結果を渡しますローカルマシンのメモリへのあなたの読取りバッファのサイズ:
static int GetBufferSize(ulong memoryKilobytes)
{
const int bufferStepSize = 256; // 256 kilobytes of buffer...
const int memoryStepSize = 128 * 1024;// ...for every 128 megabytes of memory...
const int minBufferSize = 512; // ...no less than 512 kilobytes...
const int maxBufferSize = 10 * 1024; // ...no more than 10 megabytes
int bufferSize = bufferStepSize * ((int) memoryKilobytes/memoryStepSize);
bufferSize = Math.Max(bufferSize, minBufferSize);
bufferSize = Math.Min(bufferSize, maxBufferSize);
return bufferSize;
}
明らかに、RAMのすべての128メガバイトのために256キロバイトしてバッファサイズを大きくすると、少し愚かなようだが、これらの数は単なる例であり、もしあなたが本当にそれをやりたければ、あなたのバッファサイズをどのように拡大するかもしれません。たくさんのファイルを一度に読んでいるのでなければ、数百キロバイトまたは数メガバイトのバッファーを心配するのは、それが価値あるものよりも難しいかもしれません。ベンチマークを行うだけで、どのサイズのバッファが最高のパフォーマンスを発揮するかを確認することができます。
今、あなたは、単にこのようにコードを更新することができます。
ulong memoryKilobytes =
GetAvailableMemoryKilobytes();
// ...or GetTotalMemoryKilobytes();
int bufferSize = GetBufferSize(memoryKilobytes);
using (FileStream TheFileStream = new FileStream(FilePath.Text, FileMode.Open))
{
byte[] FileArray = new byte[bufferSize];
int readCount;
while ((readCount = TheFileBinary.Read(FileArray, 0, bufferSize)) > 0)
{
// Call a method here, passing FileArray as a parameter
}
}
'それはおそらく間違いだalgorithm'暗号化をしようとしています。安全な暗号は_hard_です。 – SLaks
あなたが求めている〜10MBはかなり少量です。なぜあなたはここの記憶問題を心配していますか?あなたは問題に遭遇しましたか?将来、10MBが多いデバイスでは、特定の問題が予想されますか? – dlev
(間違いなく)_better_アプローチはあなた自身のストリームを作ることでしょう。 –