编辑9月26日
请参阅下面的完整背景.tl; dr:数据网格控件导致奇怪的异常,我正在寻找帮助隔离原因并找到解决方案.
我把它缩小了一点.我已经能够在较小的测试应用程序中重现行为,更可靠地触发不稳定的行为.
我绝对可以排除线程和(我认为)内存问题.新的应用程序不使用任务或其他线程/异步功能,我可以简单地通过向DataGrid中显示的对象类添加返回常量的属性来触发未处理的异常.这向我表明问题是在非托管资源耗尽或我尚未想到的问题.
修订后的计划结构如下.我创建了一个名为的用户控件EntityCollectionGridView,它有一个标签和一个数据网格.在控件的Loaded事件处理程序中,我将List<TestClass>数据网格分配给1000或10000行,让网格生成列.在页面OnNavigatedTo事件中的MainPage.xaml中将此用户控件实例化2-4次(或者Loaded,它似乎并不重要).如果发生异常,则会在显示MainPage后立即发生.
有趣的是,行为似乎并没有随着显示的行数而变化(它可以在10000行中可靠地工作,或者在每个网格中只有1000行可靠地失败),而是在所有网格中的总列数在给定时间加载.有20个属性显示,4个网格工作正常.有35个属性和4个网格,抛出异常.但是,如果我消除两个网格,同一个具有35个属性的类将正常工作.
请注意,我添加到TestClass20列到35列的所有属性都具有以下形式:
public string StringXYZ { get { return "asdfasdfasdfasdfasf"; } }
Run Code Online (Sandbox Code Playgroud)
因此,后备数据中没有额外的内存(同样,我认为内存压力无论如何都不是问题).
你们都觉得怎么样?同样,任务管理器中的句柄/用户对象/等看起来不错,但还有其他一些我可能会丢失的东西吗?
原帖
我一直在使用Silverlight Toolkit DataGrid到WinRT的端口,它在简单的测试(各种配置和多达10000行)中做得很好.但是,由于我试图将其嵌入到另一个WinRT应用程序中,我遇到了一个零星的异常(类型为System.Exception,在App.UnhandledException处理程序中引发),这种异常很难调试.
Not enough quota is available to process this command. (Exception from HRESULT: 0x80070718)
Run Code Online (Sandbox Code Playgroud)
该错误始终可重复,但不是确定性的.也就是说,我可以在每次运行应用程序时实现它,但并不总是通过执行相同次数的相同精确步骤来实现.错误似乎发生在页面转换(无论是向前导航到新页面还是返回到上一页),而不是(例如)更改数据网格的ItemsSource时.
应用程序结构基本上是通过层次结构的递归访问,每个层次结构级别都显示一个页面.在层次结构中当前节点的页面上,显示了每个子节点和一些孙子节点,并且对于任何子节点,可以显示数据网格.在实践中,我一直使用以下导航结构重现这一点:
Root page: shows no datagrid
Child page: shows one datagrid and a few listviews
Grandchild page: shows two datagrids, one bound to the
same source as Child page, the other one …Run Code Online (Sandbox Code Playgroud) 我正在将一个运行.NET 3.5+的.NET应用程序移植到WinRT,它包含一个WCF服务客户端(使用ChannelFactory<T>编程方式创建),它与原始版本共享几乎所有代码(即尽可能多的相同)该程序.该服务通过端口9443上的SSL访问,并使用Windows身份验证.该代码的原始版本完美无瑕,但WinRT端口通常会失败,除了三层三明治之外:我得到一个EndpointNotFoundException("没有端点监听https:// ..."),内部异常为WebException( "无法连接到远程服务器")内部异常SocketException("尝试以其访问权限192.168.xx:9443禁止的方式访问套接字").
奇怪的是,这将一直失败,除非我让Fiddler充当代理并捕获流量.
现在,更多细节.
我在站点根目录中有以下clientaccesspolicy.xml,可以通过相应的端口通过http和https访问它:
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Run Code Online (Sandbox Code Playgroud)运行该服务的服务帐户具有与之关联的UPN,因为有人建议可能有所帮助.我尝试将其放入<servicePrincipalName/>我的端点<identity />,但无济于事; 使用<dns />那里也没有帮助.
BasicHttpBinding有BasicHttpSecurityMode.Transport,而且我设置ClientCredentialType = HttpClientCredentialType.Windows.凭证目前是硬编码的并且是正确的.但我认为这不是问题所在,因为......希望这表明我已经对此做了尽职调查.我错过了什么?如果我能提供更多信息,请告诉我.