FixedAddressValueTypeAttribute 생성자
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
FixedAddressValueTypeAttribute 클래스의 새 인스턴스를 초기화합니다.
public:
FixedAddressValueTypeAttribute();
public FixedAddressValueTypeAttribute ();
Public Sub New ()
예제
다음 예제에서는 특성을 사용하여 메모리에 FixedAddressValueTypeAttribute 정적 필드를 고정하는 방법을 보여 줍니다. 구조를 정의하고 형식Age
의 Age
정적 필드가 있는 두 클래스를 초기화합니다. 두 번째 클래스는 FixedAddressValueTypeAttribute 필드의 주소를 고정하는 데 적용됩니다. 이러한 두 개체가 인스턴스화되고 가비지 수집기가 호출되기 전과 후에 많은 메모리 할당이 수행됩니다. 예제의 출력은 가비지 수집 후 첫 번째 Age
필드의 주소가 변경되었지만 적용된 FixedAddressValueTypeAttribute 필드의 주소가 변경되지 않았다는 것을 보여줍니다.
using System;
using System.Runtime.CompilerServices;
public struct Age {
public int years;
public int months;
}
public class FreeClass
{
public static Age FreeAge;
public static unsafe IntPtr AddressOfFreeAge()
{
fixed (Age* pointer = &FreeAge)
{ return (IntPtr) pointer; }
}
}
public class FixedClass
{
[FixedAddressValueType]
public static Age FixedAge;
public static unsafe IntPtr AddressOfFixedAge()
{
fixed (Age* pointer = &FixedAge)
{ return (IntPtr) pointer; }
}
}
public class Example
{
public static void Main()
{
AllocateMemory();
// Get addresses of static Age fields.
IntPtr freePtr1 = FreeClass.AddressOfFreeAge();
AllocateMemory();
IntPtr fixedPtr1 = FixedClass.AddressOfFixedAge();
AllocateMemory();
// Garbage collection.
GC.Collect();
GC.WaitForPendingFinalizers();
// Get addresses of static Age fields after garbage collection.
IntPtr freePtr2 = FreeClass.AddressOfFreeAge();
IntPtr fixedPtr2 = FixedClass.AddressOfFixedAge();
// Display addresses before and after garbage collection
Console.WriteLine("Normal static: {0} -> {1}", freePtr1, freePtr2);
Console.WriteLine("Pinned static: {0} -> {1}", fixedPtr1, fixedPtr2);
}
// Allocate memory for 100,000 objects.
static public void AllocateMemory()
{
for (int ctr = 0; ctr <= 100000; ctr++)
{
object o = new object();
}
}
}
// The example displays output similar to the following:
// Normal static: 19932420 -> 19863704
// Pinned static: 19985508 -> 19985508
적용 대상
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET