sorunun biz MS KB 976618 ve bağlı ilgili karşılaşıyorsanız Çünkü Çıktı
üretim sunucularında bilinmeyen üçüncü taraflardan ikili kod çalıştırmak istemiyorum C# diline zorlanıyorum. Çünkü ben C# 'da bir newb olduğumu bir süre aldı ama nihayet insanların gönderdiği kod parçacıklarının etrafındaki fazla bitleri anladım. Yani derler ve ishal benim tam ms visual studio C# konsol programıdır: my Windows 7 x64 PC'de
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool GetSystemFileCacheSize(
ref IntPtr lpMinimumFileCacheSize,
ref IntPtr lpMaximumFileCacheSize,
ref IntPtr lpFlags
);
static void Main(string[] args)
{
IntPtr lpMinimumFileCacheSize = IntPtr.Zero;
IntPtr lpMaximumFileCacheSize = IntPtr.Zero;
IntPtr lpFlags = IntPtr.Zero;
bool b = GetSystemFileCacheSize(ref lpMinimumFileCacheSize, ref lpMaximumFileCacheSize, ref lpFlags);
Console.WriteLine(b);
Console.WriteLine(lpMinimumFileCacheSize);
Console.WriteLine(lpMaximumFileCacheSize);
Console.WriteLine(lpFlags);
}
}
ve
True
1048576
1099511627776
0
verir ve hayır, bu üretim sunucusu değil.
ve sonra powershell bu
$source = @"
using System;
using System.Runtime.InteropServices;
namespace MyTools
{
public static class cache
{
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool GetSystemFileCacheSize(
ref IntPtr lpMinimumFileCacheSize,
ref IntPtr lpMaximumFileCacheSize,
ref IntPtr lpFlags
);
public static bool Get(ref IntPtr a, ref IntPtr c, ref IntPtr d)
{
IntPtr lpMinimumFileCacheSize = IntPtr.Zero;
IntPtr lpMaximumFileCacheSize = IntPtr.Zero;
IntPtr lpFlags = IntPtr.Zero;
bool b = GetSystemFileCacheSize(ref lpMinimumFileCacheSize, ref lpMaximumFileCacheSize, ref lpFlags);
a = lpMinimumFileCacheSize;
c = lpMaximumFileCacheSize;
d = lpFlags;
return b;
}
}
}
"@
Add-Type -TypeDefinition $source -Language CSharp
# Init variables
$SFCMin = 0
$SFCMax = 0
$SFCFlags = 0
$b = [MyTools.cache]::Get([ref]$SFCMin, [ref]$SFCMax, [ref]$SFCFlags)
#typecast values so we can do some math with them
$SFCMin = [long]$SFCMin
$SFCMax = [long]$SFCMax
$SFCFlags = [long]$SFCFlags
write-output "Return values from GetSystemFileCacheSize are: "
write-output "Function Result : $b"
write-output " Min : $SFCMin"
write-output (" Max : $SFCMax (" + $SFCMax/1024/1024/1024 + " GiB)")
write-output " Flags : $SFCFlags"
Sonraki adımdır: SetSystemFileCacheSize, bunun için bir powershell komut dosyası yazılı ve üzerinde bir örnek yoktur şaşırdım https://serverfault.com/questions/325277/windows-server-2008-r2-metafile-ram-usage/527466#527466
üzerine koydu ettik Bu işlev için http://pinvoke.net. (Kernel32.dll alt menüsüne gidin). Çalışırsanız, lütfen bu siteye bir örnek ekleyin (bu bir wiki). –
Hatayı almak için daha sonra GetLastWin32Error'u aramayı denediniz mi? –
Üzgünüm - Tamamen uyuşturucu, hala X86'a ayarlanmış bir hedef platformu vardı. Şimdi utanıyorum. Bir CPU'ya ayarlandığında, iyi çalışıyor. – Johnv2020