3

我们的数据网格存在架构问题。网格支持使用包含上述所有参数的 linq2entity 查询进行搜索、分页和排序。

在某些页面上,网格不应显示来自数据库的内容(例如列“名称”),而是由资源提供者加载的已翻译资源。

我们的资源提供者从数据库中获取翻译并将它们缓存到应用程序缓存中,以避免不必要地访问数据库。

此时,我们有以下几种可能:

  1. 在数据库上没有搜索、排序和分页,因此加载所有行,然后从资源提供程序加载翻译,然后在应用程序中进行搜索、排序和分页。
    性能不好,因为数据库很大

  2. 对数据库进行搜索、排序和分页,然后加载资源以获取结果。
    显示的值将与搜索和排序配置不匹配

  3. 在 linq 查询中直接从数据库中获取资源。
    无法使用资源提供者缓存。与资源提供者文本的加入将非常糟糕和缓慢

每种可能性都很糟糕,但我想不出另一种解决方案。有什么好的建议吗?这些问题在其他软件中是如何解决的?

4

2 回答 2

3

您可以通过从数据库中获取相关的过滤记录并将其保存在ViewState.

如何提高性能?

您可以将JSON/Page 方法用于Database Callings. 我将通过一个示例向您解释。

单击此处查看使用 JSON 的 GridView 绑定的代码

用 JSON 标记

在此处输入图像描述

我正在从客户端调用方法背后的代码


代码背后

在此处输入图像描述

输出

在此处输入图像描述

单击此处检查更新面板的输出





如果应用程序占用太多内存,那么您需要像 Red Gate Ants Memory Profiler 这样的 Doctor。单击此处查看有关它的更多详细信息

在此处输入图像描述


确保使用Using语句来避免Memory Out of Exceptions

using (SqlConnection connection = new SqlConnection()) 
{     
      connection.Open();  
      //Also for SqlCommand... Sample code...
      using (SqlCommand cmd = new SqlCommand()) 
      { 
      }    
      using (SqlTransaction transaction = connection.BeginTransaction())     
      {         
            transaction.Commit();     
      } 
} 

你知道Teleric Grid吗?它首先从数据库中加载所有记录并保存在Cache. 为了做到这一点,您必须使用Paging并且Disposing对象是强制性的。Teleric Grid在 中显示这些记录Paging。因此,您可以避免渲染问题以摆脱一次显示所有记录。

于 2012-07-26T20:46:53.450 回答
2

我不能正确理解你的问题,但是如果你想对翻译资源进行所有操作,你必须将翻译资源存储在数据库中,然后将它们放入会话对象并对其应用过滤器,如果它是表格或列表的形式,然后给出源到网格,它必须配置为与从会话对象过滤的翻译资源一起工作。

于 2012-07-26T11:14:44.103 回答