C# VirtualAlloc将如何增强.Net应用程序;她的表现如何?

C# VirtualAlloc将如何增强.Net应用程序;她的表现如何?,c#,performance,winapi,memory-management,C#,Performance,Winapi,Memory Management,我在一些C#应用程序中看到了VirtualAlloc/Free windows API方法的一些用法,我想知道在C#中使用这些方法的原因 VirtualAlloc/Free对我有什么好处,有什么想法吗 编辑:VirtualAlloc的性能会比典型的.Net“new”语句或任何其他.Net内存分配方法更好吗?我看到的唯一好处是单个受管对象的大小限制为2GB。如果使用VirtualAlloc/VirtualFree可以管理更大的对象。同时,我建议您为此使用NT堆(HeapAlloc/HeapFree

我在一些C#应用程序中看到了VirtualAlloc/Free windows API方法的一些用法,我想知道在C#中使用这些方法的原因

VirtualAlloc/Free对我有什么好处,有什么想法吗


编辑:VirtualAlloc的性能会比典型的.Net“new”语句或任何其他.Net内存分配方法更好吗?

我看到的唯一好处是单个受管对象的大小限制为2GB。如果使用
VirtualAlloc/VirtualFree
可以管理更大的对象。同时,我建议您为此使用NT堆(
HeapAlloc/HeapFree


阅读有关内存状态的信息:已提交/保留/可用。您可以在虚拟分配中使用它们。在一些罕见的情况下,它们是有用的。

我看到的唯一好处是单个托管对象的大小限制为2GB。如果使用
VirtualAlloc/VirtualFree
可以管理更大的对象。同时,我建议您为此使用NT堆(
HeapAlloc/HeapFree



阅读有关内存状态的信息:已提交/保留/可用。您可以在虚拟分配中使用它们。在一些罕见的情况下,它们是有用的。

需要使用VirtualAllocEx的一种情况是,您需要在不同进程的地址空间中分配内存。我无法想象在托管应用程序中使用VirtualAllocEx或VirtualAllock的任何其他用例。

需要使用VirtualAllocEx的一个场景是当您需要在不同进程的地址空间中分配内存时。我无法想象托管应用程序中的VirtualAllocEx或VirtualAlloc还有其他任何用例。

MSDN对VirtualAlloc/Free的功能有何评论。。你做过谷歌搜索吗?这里有一个很好的链接,可以检查保留和提交内存[1]你在寻找什么好处?另外,你能举一个使用它的代码的例子吗?我们也许可以理解为什么。这个问题感觉像“什么是需要这个解决方案的问题?”有点宽泛。这似乎是一个过于宽泛和开放的问题。也许你应该问一下你见过的具体例子。当然,它已经在使用它了。任何分配内存的Windows程序都会使用它。问“它能做得更好吗?”毫无意义,这已经是一个沉重的负担。MSDN对VirtualAlloc/Free的功能有何评论。。你做过谷歌搜索吗?这里有一个很好的链接,可以检查保留和提交内存[1]你在寻找什么好处?另外,你能举一个使用它的代码的例子吗?我们也许可以理解为什么。这个问题感觉像“什么是需要这个解决方案的问题?”有点宽泛。这似乎是一个过于宽泛和开放的问题。也许你应该问一下你见过的具体例子。当然,它已经在使用它了。任何分配内存的Windows程序都会使用它。问“它能做得更好吗?”毫无意义,这已经是一个沉重的负担。没错,但VirtualAlloc和VirtualAllocEx是不同的API。@KirillKobelev确实如此,但密切相关。我看不出有任何需要
VirtualAlloc
,因为
AllocHGlobal
拥有您所需要的全部,如果您只需要一个>2GB的块。如果您必须使用本机API,那么
HeapAlloc
就是其中之一。所以我猜Eran所指的代码实际上使用了
VirtualAllocEx
,他/她没有正确地记住这个细节。我猜VitrualAlloc(不是VirtualAllocEx)的唯一用法是如果您想编写我们自己的堆或类似的东西。有时会发生这种情况。@Kirill这很奇怪,因为你在回答中说了一些其他的话。嗯,是和否。使用提交/保留的东西,它看起来像一堆吗?p、 对于大于2gb的分配,您仍然应该使用HeapAlloc。对我来说,
VirtualAllocEx
只用于注入dll。你知道还有其他用途吗?是的,但VirtualAlloc和VirtualAllocEx是不同的API。@KirillKobelev确实如此,但关系密切。我看不出有任何需要
VirtualAlloc
,因为
AllocHGlobal
拥有您所需要的全部,如果您只需要一个>2GB的块。如果您必须使用本机API,那么
HeapAlloc
就是其中之一。所以我猜Eran所指的代码实际上使用了
VirtualAllocEx
,他/她没有正确地记住这个细节。我猜VitrualAlloc(不是VirtualAllocEx)的唯一用法是如果您想编写我们自己的堆或类似的东西。有时会发生这种情况。@Kirill这很奇怪,因为你在回答中说了一些其他的话。嗯,是和否。使用提交/保留的东西,它看起来像一堆吗?p、 对于大于2gb的分配,您仍然应该使用HeapAlloc。对我来说,
VirtualAllocEx
只用于注入dll。你知道还有其他用途吗?