....
....
Employee employeeInfo;
for(int i =0; i<n;++i)
{
employeeInfo = new Employee();
employeeInfo.FirstName = arr[i].ToString();
employeeInfo.Age = i;
employeeList.Add(employeeInfo);
....
}
답변
객체를 할당 => 잃어버린 시간을 사용하지 않는 객체를 생성합니다. 가지고있는 것은 객체에 대한 참조 인 지역 변수이며, 변수는 생성 된 각 객체에 사용됩니다.
로컬 변수를 사용하여 현재 개체를 추적하고 나중에 개체를 컬렉션에 루프 저장할 수 있습니다.
각 개체를 어딘가에 저장하지 않으면 다음 개체를 변수에 할당하면 이전 개체가 손실됩니다. 이전 개체가 여전히 존재하지만 더 이상 참조가 없으므로 나중에 가비지 수집기에서 제거됩니다. 이 LOC를 호출
@ Guffa, 설명을 이해했다면 새로운 직원 개체를 만들 때 스택에 변수가 있고 heap에 개체가있을 것입니다. 프로그램에서 새 직원 개체, 힙의 새 개체를 인스턴스화하는 모든 반복 (주소가 다른) 다른 위치에 생성되지만 스택에 employeeInfo라는 변수가 하나만 있습니다. 속성에 값을 설정 한 후 생성 된 객체를 목록에 추가합니다. 사실 우리는 객체의 주소를 어딘가에 저장합니다. 맞습니까? – odiseh
@Guffa : qquestion : 우리가 알고있는 것처럼 GC 액션의 비 결정적입니다. n = 10, i = 8을 가미하면 지금까지 8 개의 객체를 목록에 추가했거나 8 개의 주소를 저장했습니다. 그 목록. 갑자기 GC가 작업을 시작하면 사용하지 않는 객체가 지워집니다. 그러면 주소가 어떻게됩니까? – odiseh
@odiseh : 가비지 수집기는 도달 할 수없는 객체 만 제거합니다. 객체에 대한 참조를 제거한다고해서 자동으로 객체가 수집되는 것은 아닙니다. 목록에있는 개체에 대한 참조가있는 한 안전합니다. – Guffa
은 당신의 코드에 따르면 모든 반복에
당신은 GC를받을 수 있습니다 employeeInfo
참조하는 새 개체 및 기존 개체를 만들 수 있습니다.
또는 Employee 생성자가 정적 컬렉션을 참조해야합니다 ...하지만 실제로는 못 생길 수 있지만 초보자 용 스 니펫은 유용하지 않습니다. – Dykam
당신은 쓸모없는 것을하고있는 의미에서 당신은 당신이 다음 만든 employeeInfo와 다른 작업을하지 않으면 - 이름이없는 메모리를
employeeInfo = new Employee();//this is where you are "instantiating objects with the same name" in your for loop.
매번는 employeeInfo 객체의 이전 값은 객체의 초기 상태로 대체됩니다; 즉, 이 호출되면 employeeInfo의 속성/변수가 기본값 (생성자에 의해 제공된 경우)에 의해 대체됩니다.
변수를 상자로 표시하십시오. 상자에 새 Employee()를 배치하고 이름을 지정하여 일부 컬렉션에 추가합니다. 그 다음에 루프를 반복 할 때 상자를 넘겨서 (이전 Employee에 대한 참조를 버리지 만 컬렉션에는 여전히 참조가 있으므로 문제가되지 않음) 상자에 새 Employee()를 추가합니다. 상자 안의 내용은 가비지 컬렉터가 청소합니다.
- 1. stat 기호 이름의 의미
- 2. 자바 스크립트에서 클래스와 같은 이름의 객체를 가질 수 있습니까?
- 3. Automake와 같은 이름의 파일들
- 4. 인터페이스가 제너릭 일 때 Activator에서 객체를 어떻게 인스턴스화합니까? 내 코드에서
- 5. jquery.validate - 같은 이름의 여러 플러그인?
- 6. 같은 이름의 iVar getter/메소드?
- 7. sfinae가 함수 본문을 인스턴스화합니까?
- 8. 배열 요소를 같은 이름의 변수에 할당합니까?
- 9. forin 루프에서 객체를 해제하는 방법은 무엇입니까?
- 10. Xcode에서 같은 이름의 리소스 사용
- 11. 같은 이름의 레이어 및 메서드
- 12. 같은 이름의 클래스를 사용하는 클래스
- 13. 각 루프에서 마지막 객체를 찾는 방법은 무엇입니까?
- 14. C/C을 찾고 ++ 언어와 표준 라이브러리 사양
- 15. Wordpress - 루프에서 이미지를 사용하여
- 16. 여러 OSGi 서비스를 어떻게 인스턴스화합니까?
- 17. C#을 사용하여 같은 이름의 양식 필드 반복하기
- 18. C#을 사용하여 같은 이름의 폴더 또는 하위 폴더 병합
- 19. 상속에서 같은 이름의 멤버에 액세스하는 방법
- 20. 파이썬에서 같은 이름의 POST 매개 변수에 액세스하기
- 21. .NET을 사용하여 루프에서 크리스탈 보고서 인쇄
- 22. ASP.NET MVC - 같은 이름의 뷰를 다중화 하시겠습니까?
- 23. _NAME, __NAME, _NAME_, __NAME__과 같은 표기법의 의미
- 24. 어떻게 자바 스크립트에서 클래스를 동적으로 인스턴스화합니까?
- 25. 같은 이름의 제네릭과 제네릭이 아닌 것
- 26. 파이썬에서 같은 클래스의 여러 객체를 정의하면
- 27. jsp에서 스트럿으로 같은 이름의 여러 입력을 검색합니다.
- 28. 같은 이름의 이전 프로젝트의 Xcode 캐싱?
- 29. C#에서 IDispatchEx를 어떻게 인스턴스화합니까?
- 30. 라이브러리 컨텍스트에서 Spring을 어떻게 인스턴스화합니까?
... for for 루프를 제공하십시오. 다음과 같은 것이 있어야합니다 :'listEmployee.Add (employeeInfo);' – JCasso
employeeInfo라는 변수/슬롯/상자가 있습니다. 루프에서 매번 새로운 직원을 얻고 상자에있는 것을 꺼내고 상자에 직원을 넣어 ... – Gishu
jcasso와 동의하겠습니까? .Add() 개체 (즉, 직원의 경우) 목록이나 컬렉션이 있어야합니다. –