2012-11-30 2 views
1

내 응용 프로그램을 사용할 때이 오류를보고하는 사용자가 있습니다.공유 메모리 영역 오류를 열 수 없습니다.

응용 프로그램은 Windows XP Embedded, SQL Server CE 3.5 sp1 및 Linq-To-SQL을 ORM으로 사용하는 .NET Winforms 응용 프로그램입니다. 데이터베이스 자체는 내 응용 프로그램이 My Documents 폴더에 만드는 하위 디렉토리에 있습니다. 사용자 계정은 시스템의 관리자 계정입니다. 데이터베이스에 연결하는 다른 응용 프로그램이나 프로세스가 없습니다.

대부분의 경우 응용 프로그램이 정상적으로 실행되는 것 같습니다. 시작되어 데이터베이스에서 데이터를로드하고 데이터를 데이터베이스에 저장할 수 있습니다. 사용자는 응용 프로그램을 사용하여 데이터베이스에 하루에 수백 번 액세스 할 수 있습니다. 이 오류는 간헐적으로 만 발생합니다. 아마 하루에 3-4 번.

코드 자체에서 모든 데이터베이스 호출은 using 절로 묶인 Linq-To-SQL 데이터 컨텍스트를 사용하고 있습니다. 그래서 다른 말로하면 : 거의 모든 데이터베이스에 대한 호출의가 (분명히 데이터를 저장하는 사람이 선택하고 아무것도 반환하지 않는 것을 제외)과 같이 무엇

using(MyDataContext db = new MyDataContext(ConnectionString)) 
{ 
    List<blah> someList = db.SomeTable.Where(//selection criteria).ToList(); 

    return(someList); 
} 

. 앞서 언급했듯이 99 %의 시간 문제는 없지만 공유 메모리 오류는 하루에 몇 번 발생합니다.

내 현재 "수정"은 응용 프로그램 시작시입니다. 데이터베이스에서 모든 데이터를 읽은 다음 (메모리가 많지 않음) 간단히 메모리에 캐시하고 데이터베이스 호출을 메모리 내 목록에서 읽도록 변환했습니다. 지금까지이 문제가 해결 된 것 같습니다. 하루 반 동안 그들은 아무 문제도보고하지 않았습니다. 그러나 이것은 처음에 오류의 원인을 알 수 없기 때문에 여전히 나를 괴롭 히고 있습니다.

응용 프로그램이 하루에 몇 백 번 데이터베이스에 액세스하는 동안 일반적으로 급속한 연속이 아닙니다. 대개 최소한 몇 분에 한 번씩입니다. 그러나 가능한 한 빨리 두 개의 호출이있을 수있는 유스 케이스가 하나 있습니다. 즉, 무엇인가 :

//user makes a selectio n on the screen 
DatabaseCall1(); 
DatabaseCall2(); 

그 모두, 그들이 새로운 컨텍스트를 만들 경우 위의 코드 블록의 패턴을 따르는 일을하고 반환합니다. 그러나 이러한 호출은 비동기 적이 지 않으므로 DatabaseCall2가 호출되기 전에 연결이 닫히고 처리 될 것으로 예상됩니다. 그러나 SQL Server CE 끝 부분에서 연결을 빨리 닫지 않을 수 있습니까? 어쩌면 대부분의 시간 동안 문제가 없는데 간헐적 인 이유를 설명 할 수 있습니다. 또한이 수정 프로그램이없는 정확한 프로그램은 하드웨어와 소프트웨어가 완전히 다른 몇 가지 시스템 (다른 시스템의 클론)에 설치되며 다른 시스템의 사용자는 오류를보고하지 않았습니다.

개발 컴퓨터 나 테스트 컴퓨터에서이 오류를 재현 할 수 없기 때문에 머리가 긁히고 있습니다.이 예외에 대한 질문에 대한 대답은 여기 또는 다른 곳에서는 일반적으로 불충분 한 사용자 권한 또는 공유 네트워크 폴더.

+0

는 해당 사용자는 열려있는 데이터베이스 파일이 있습니까 내가 (다른 연결 문자열과) 다른 응용 프로그램/도구? 또는 앱에서 여러 다른 문자 (문자로 된) 연결 문자열을 사용합니까? – ErikEJ

답변

관련 문제