vb.net의 다양한 개체 (공유 클래스, 모듈 등)가 얼마나 널리 보이는가
-
12-09-2019 - |
문제
다양한 객체가 공통 코드에 액세스 할 수있는 VB.NET 응용 프로그램이 있으며 모든 통화간에 공유 된 카운터와 값이 있으므로 현재 "공유 클래스"를 사용하고 있습니다 (클래스 CAN을 알고 있습니다. 공유, 그 자체로 공유되지만 모든 변수와 방법은 "공유"로 표시됩니다).
내 우려는이 객체의 가시성에 대한 것입니다. 사용자가 동일한 데스크탑에서 응용 프로그램의 두 인스턴스를 실행하면 공유 클래스의 동일한 "인스턴스"를 사용합니까? 다시 말해, 응용 프로그램의 두 사본이 동일한 카운터를 증가시키고 동일한 변수를 사용합니까?
또한 동일한 컴퓨터의 두 사용자 공간은 어떻습니까? 각 사용자가 사본을 실행하면 두 사본이 방해됩니까?
아마도 나는 "공유 된"개념을 자호하고 있으며이를 수행하는 훨씬 더 좋은 방법이 있습니다 (일부 사람들은 클래스 대신 모듈을 통해 코드를 공유하는 것을 알고 있습니다). 전체 응용 프로그램에서 객체 (변수와 방법 모두)를 공유하는 더 나은 방법이 있지만 다른 응용 프로그램 인스턴스와 분리되어 있으십니까?
업데이트 : "선호하는"방법에 대한 질문에 대한 응답으로, 내가 쓰고있는 응용 프로그램은 사용자가 실행중인 다른 인스턴스 사이에도 데이터를 비공개로 유지해야합니다. 이 경우 여러 인스턴스간에 데이터를 전혀 공유하고 싶지 않으므로 공유 클래스 또는 모듈을 사용하는 부작용에 대해 우려합니다. 질문에 감사드립니다.
해결책
단일 사용자 또는 여러 사람이 실행하든 응용 프로그램의 각 인스턴스에는 자체 공유 필드 사본이 표시됩니다.
이 블로그 항목 정적/공유 필드가 기본 컨텍스트가 아닌 스레드와 같은 항목으로 appdomain이 아닌 스레드와 같은 항목으로 범위가 붙어있는 경우를 더 자세히 설명합니다.
다른 팁
공유 값 (또는 C#ER 인 경우 정적)은 앱 도메인에만 공통적입니다.
여러 앱 도메인을 동일한 프로세스에로드 할 수 있으며 각각 자체 공유 값 세트가 있습니다.