सभी तुम इतनी तरह अपने घोषणा बदल करना है:
[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize",
SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess,
long dwMinimumWorkingSetSize, long dwMaximumWorkingSetSize);
कारण की वजह से है definition of the SetProcessWorkingSetSize
function:
BOOL WINAPI SetProcessWorkingSetSize(
_In_ HANDLE hProcess,
_In_ SIZE_T dwMinimumWorkingSetSize,
_In_ SIZE_T dwMaximumWorkingSetSize
);
ध्यान दें कि यह एक DWORD
(के रूप में 32-बिट पूर्णांक) का उपयोग नहीं करता है, लेकिन एक SIZE_T
, जो is defined as:
अधिकतम बाइट्स जो पॉइंटर इंगित कर सकता है। गिनती के लिए उपयोग करें जो एक पॉइंटर की पूरी श्रृंखला को फैलाएगा। इस प्रकार का BaseTsd.h में घोषित किया जाता है इस प्रकार है:
typedef ULONG_PTR SIZE_T;
इसका मतलब यह है कि यह एक 64-बिट मूल्य एक long
को बदल सकते हैं और 64-बिट सिस्टम पर समारोह काम करने की क्षमता है, इसलिए। इसके अलावा, MSDN की धारा "Common Visual C++ 64-bit Migration Issues" शीर्षक से:
size_t, टाइम_टी, और ptrdiff_t 64-बिट विंडोज ऑपरेटिंग सिस्टम पर 64-बिट मान हैं।
हालांकि, यह एक दुविधा का थोड़ा सा प्रस्तुत करता है, जिसमें आप मंच-विशिष्ट असेंबली संकलित नहीं करना चाहते हैं (यह एक पिटा होगा)। आप इस के आसपास DllImportAttribute
class पर EntryPoint
field (जो आप पहले से ही कर रहे हैं) का लाभ लेने दो विधि घोषणाओं के लिए प्राप्त कर सकते हैं:
[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize",
SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern bool SetProcessWorkingSetSize32(IntPtr pProcess,
int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);
[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize",
SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern bool SetProcessWorkingSetSize64(IntPtr pProcess,
long dwMinimumWorkingSetSize, long dwMaximumWorkingSetSize);
अब आप दो अलग-अलग हस्ताक्षर किया है। हालांकि, को जानने के लिए कॉल करने के लिए हस्ताक्षर अभी भी एक मुद्दा है। आप हर जगह सशर्त चेक नहीं रखना चाहते हैं। इसके लिए, मैं एक ऐसी विधि बनाने की अनुशंसा करता हूं जो आपके लिए चेक करता है और उसे कॉल करता है।
आप इस दृढ़ संकल्प के लिए Environment
class पर Is64BitProcess
property का उपयोग करना चाहेंगे। Is64BitOperatingSystem
property का उपयोग न करें। आप पूर्व चाहते हैं क्योंकि 32-बिट प्रक्रिया 64-बिट ऑपरेटिंग सिस्टम पर चल सकती है, और आप यह सुनिश्चित करना चाहते हैं कि आपका कोड उस के लिए लचीला है; सिर्फ यह देखने के लिए जांचें कि ऑपरेटिंग सिस्टम 64 बिट आपको पूरी तस्वीर नहीं देता है।
कोई भी कारण आप प्रबंधित एपीआई का उपयोग नहीं करते हैं? http://msdn.microsoft.com/en-us/library/system.diagnostics.process.minworkingset(v=vs.110) – rene
सामान्य रूप से, यह एक बुरा विचार है क्योंकि ढांचा कार्य सेट आकार को अनुकूलित करेगा। आपकी आवश्यकता क्या है? – Maciej
@Maciej हमने कार्यक्रम पर गहरे विलंबता विश्लेषण के 3 सप्ताह चलाए हैं, और हम मुलायम पृष्ठ दोषों के कारण कार्यक्रम में 250us ब्लिप देख रहे हैं। हम सॉफ्ट पेज दोषों की मात्रा को कम करने के लिए कार्य सेट आकार को बढ़ाने का प्रयास कर रहे हैं। – Contango