一些背景:我在SSMS 2012中遇到了这个内存异常,因为它与Red Gate的SQLPrompt一起发布(这个例外在同一台笔记本电脑上的SSMS 2008R2中从未发生).
我最初每天都遇到这些异常(SSMS2012和SQLPrompt),这迫使我关闭并重新打开SSMS(以及我正在处理的所有事情).几个月前,我偶然发现了一个支持线程,指出可能的附加组件是原因所以我卸载了我唯一的附加组件(SQL Prompt,但没有卸载开发人员的其他软件包)并且花了很多个月没有一个例外减去System.OutOfMemoryException异常.
一旦SP1在2012年发布,我就应用它并重新安装SQL Prompt(最新版本),看看问题是否已经解决,并且在开发时间的7小时内,我再次受到了臭名昭着的System.OutOfMemoryException的欢迎.
通过所有这些,我一直在打开Red Gate的门票,并在他们看到异常时提交调试日志,但由于内存异常没有明确列出SQLPrompt,他们不会将问题上报给开发团队.在此特定异常之前,SQL Prompt在SSMS 2012 IDE(Visual Studio 2010)中抛出了许多异常(下面列出了一些异常).我相信内存异常是SQL Prompt如何管理缓存数据并占用SSMS可用内存的问题的症状,最终会导致异常.
我已经学会了如何推迟这个问题以及如何重现它,它与两个变量直接相关:
我连接到越快的异常的实例越多,这导致SQL Prompt缓存每个实例的所有对象信息.一旦引发内存异常,情况就会降低,直到SSMS完全崩溃(除非我先关闭它).
我所追求的是如何收集更多/更好的信息,以提交给红门以纠正这个问题.这是我需要你帮助的地方.
笔记本电脑:HP Elite书籍8440 RAM:6GB
当前操作系统:Win 7 Enterprise Ed Sp1
以下是SQL Prompt引起的一些异常:
System.ArgumentOutOfRangeException "Specified argument was out of the range of valid values."
Microsoft.VisualStudio.Text.Implementation.BinaryStringRebuilder.GetLineNumberFromPosition(N/A,N/A)
Microsoft.VisualStudio.Text.Implementation.TextSnapshot.GetLineFromPosition(Microsoft.VisualStudio.Text.Implementation.TextSnapshot,N/A)
Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.GetLineIndexOfPosition(N/A,System.Int32,System.Int32&,System.Int32&)
RedGate.SQLPrompt.CommonVS.Editor.VSScriptProvider.PositionFromIndex(RedGate.SQLPrompt.CommonVS.Editor.VSScriptProvider,System.Int32)
RedGate.SqlPrompt.Metadata.Script.ScriptProviderBase.GetText(RedGate.SQLPrompt.CommonVS.Editor.VSScriptProvider,System.Int32,System.Int32)
RedGate.SqlPrompt.Engine.NewEngine.SqlPromptEngine.GetCandidates(RedGate.SqlPrompt.Engine.NewEngine.SqlPromptEngine,System.Int32)
RedGate.SqlPrompt.Engine.PromptEngineEmulator.get_GetSuggestions(RedGate.SqlPrompt.Engine.PromptEngineEmulator)
RedGate.SqlPrompt.Engine.AutoCompleter.m_FilterChanged(RedGate.SqlPrompt.Engine.AutoCompleter,RedGate.SqlPrompt.Engine.PromptEngineEmulator,System.EventArgs)
RedGate.SqlPrompt.Engine.PromptEngineEmulator.OnFilterChanged(RedGate.SqlPrompt.Engine.PromptEngineEmulator)
RedGate.SqlPrompt.Engine.PromptEngineEmulator.set_Index(RedGate.SqlPrompt.Engine.PromptEngineEmulator,System.Int32)
RedGate.SqlPrompt.Engine.PromptEngineEmulator.set_CaretPosition(RedGate.SqlPrompt.Engine.PromptEngineEmulator,N/A)
RedGate.SQLPrompt.CommonUI.Editor.EditorWindowBase.SetEngineCaretPosition(RedGate.SQLPrompt.SSMSUI.SSMSEditorWindow,N/A)
RedGate.SQLPrompt.CommonUI.Editor.EditorWindowBase.UpdateUIPrompts(RedGate.SQLPrompt.SSMSUI.SSMSEditorWindow)
RedGate.SQLPrompt.CommonVS.Editor.VSEditorWindow.OnTextViewCommandExec(RedGate.SQLPrompt.SSMSUI.SSMSEditorWindow,RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor,RedGate.SQLPrompt.CommonVS.Editor.CommandExecEventArgs)
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.AfterCommandExecute(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor,RedGate.SQLPrompt.CommonVS.Editor.CommandExecEventArgs)
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor..(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.)
RedGate.SQLPrompt.CommonUI.Utils.ErrorDialog.Do(System.Action)
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor,System.Guid&,System.Uint32,System.Uint32,System.IntPtr,System.IntPtr)
RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor..(RedGate.SQLPrompt.CommonVS.Editor.TextViewMonitor.,System.Guid&,System.Uint32,System.Uint32,System.IntPtr,System.IntPtr)
Microsoft.VisualStudio.Editor.Implementation.CommandChainNode.Exec(N/A,N/A,N/A,N/A,N/A,N/A)
System.ArgumentException 00:05:14.7510000 "The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))"
#mMc.#JQub.#OQub(#mMc.#JQub,N/A,System.Uint32,#mMc.#k3ub&)
#mMc.#JQub.#z26.#8Di(#mMc.#JQub.#z26) …Run Code Online (Sandbox Code Playgroud) 情况:
我们在笔记本电脑上使用本地SQL Server实例,并使用Red-Gate的SQL源代码控制将这些实例绑定到我们的SVN存储库.最初,当我被发布时,这台笔记本电脑执行"获取最新"和"提交"同步的速度相对较快(1/4到4/4时间为2分钟).几个星期之后,很明显这个过程已经显着减慢,现在这个过程大约需要20分钟进行一次同步.
此时我已经开始尝试针对此问题的每个基本故障排除策略,使用SQL Source Control执行从卸载到重新安装的所有操作; 将版本升级到最新版本甚至降级到各种旧版本.我使用本地存储库测试SSC以排除网络,并使用"工作文件夹",甚至使用"正在评估"的lite存储库.他们都很慢; 与每个其他选项一样慢,至少需要20分钟才能执行单个同步.
如果没有纠正这个问题,我通过我们的支持合同联系了红门.长话短说,这无处可去.经过几个月的不同情景,我们似乎没有更接近解决方案.
最终我发现,如果没有链接到存储库的静态数据,我可以更快地(大约5分钟)同步数据库.但问题是数据必须链接(SSIS配置数据或RI静态数据),所以这不是一个可行的选择,但它确实有助于更准确地指出真正的问题.
现在,对于单个同步,同步的时间已达到约2小时.还有其他几个开发人员也在处理这个问题,其中一个必须等待长达6个小时才能完成最新版本.
其他信息:
•此笔记本电脑上没有其他应用程序运行缓慢
•驱动器是加密的SSD,已配置为使用1GB的RAM进行缓存
•我们已经对禁用的防病毒/防御软件进行了测试,但没有任何区别
这可能是什么原因?