【问题标题】:System out of memory exception with kentico custom repeater系统内存不足异常与 kentico 自定义中继器
【发布时间】:2018-06-23 21:01:04
【问题描述】:

我在进行 kentico 转发器转换时面临一个非常复杂的情况,我创建了 3 个自定义转发器来处理以下附件字段“图像、报告和文件”,我在页面类型中创建了这些字段以按类型分隔附件。所以为了处理我的数据,我按照this post 创建了以下转换:

    <%@ Register Src="~/CMSModules/Content/Controls/Attachments/DocumentAttachments/DocumentAttachments.ascx" TagName="DocumentAttachments" TagPrefix="cms" %><%@ Register Src="~/CMSModules/Content/Controls/Attachments/DocumentAttachments/DocumentAttachmentsVideo.ascx" TagName="DocumentAttachmentsVideo" TagPrefix="cms" %>


< script runat="server">
   protected override void OnInit(EventArgs e)
{
    CMS.DataEngine.DataClassInfo dci = CMS.DataEngine.DataClassInfoProvider.GetDataClassInfo(Eval("ClassName").ToString(), true);

    if (dci != null)
    {
       CMS.FormEngine.FormInfo fi = new CMS.FormEngine.FormInfo(dci.ClassFormDefinition);
        // field name we added in the page type
    CMS.FormEngine.FormFieldInfo ffi = fi.GetFormField("Images");
    CMS.FormEngine.FormFieldInfo ffiReports = fi.GetFormField("Reports");
    CMS.FormEngine.FormFieldInfo ffiFiles = fi.GetFormField("Files");

     Guid AttachmentGroupGUID = ffi.Guid;
     Guid AttachmentGroupGUIDRep = ffiReports.Guid;
     Guid AttachmentGroupGUIDFil = ffiFiles.Guid;

    ucDocAttachments.Path = Eval<string>("NodeAliasPath");
    ucDocAttachmentReports.Path = Eval<string>("NodeAliasPath");
    ucDocAttachmentFil.Path = Eval<string>("NodeAliasPath");

       ucDocAttachments.AttachmentGroupGUID = AttachmentGroupGUID;
       ucDocAttachmentReports.AttachmentGroupGUID = AttachmentGroupGUIDRep;
       ucDocAttachmentFil.AttachmentGroupGUID = AttachmentGroupGUIDFil;

     ucDocAttachments.TransformationName = "CMS.Root.Attachment";
     ucDocAttachmentReports.TransformationName = "CMS.Root.AttachmentLinks";
     ucDocAttachmentFil.TransformationName = "CMS.Root.AttachmentLinks";

     ucDocAttachments.StopProcessing = false;
    ucDocAttachmentReports.StopProcessing = false;
    ucDocAttachmentFil.StopProcessing = false;

    ucDocAttachments.ReloadData(true);
    ucDocAttachmentReports.ReloadData(true);
    ucDocAttachmentFil.ReloadData(true);
    }
}
< /script>


    <div class="innerSelectedElectionContainer col-xs-12 selected-<%# DataItemIndex %>">
    <div class="col-xs-12 selectedElectionInfo selectedContent-0">
        <div class="col-xs-12 selectedElectionTitle elem-to-hide">
            <%# Eval("Title") %>
        </div>
        <div class="col-xs-12 selectedElectionText elem-to-hide">
            <%# Eval("Text") %>
        </div>
    </div>
    <div class="selectedElectionInfo elem-to-hide selectedContent-1">
        <div class="col-xs-12 photosLabel"><%# Localize("{$photosGallery$}") %></div>
       <div class="col-xs-12 noPaddingSides FlexWrap"> <cms:DocumentAttachments ID="ucDocAttachments" runat="server" PageSize="100" GetBinary="false" />

          </div>
    </div>
    <div class="selectedElectionInfo elem-to-hide selectedContent-2 col-xs-12">
        <div class="col-xs-12 photosLabel"><%# Localize("{$videosGallery$}") %></div><cms:DocumentAttachmentsVideo ID="DocumentAttachmentsVideo" runat="server"  GetBinary="false" StopProcessing="true" ImageFieldValues='<%# Eval("Videos") %>' />
    </div>
    <div class="selectedElectionInfo elem-to-hide selectedContent-3">
              <div class="col-xs-12 photosLabel"><%# Localize("{$reports$}") %></div>
       <div class="col-xs-12 selectedContent-3 ElectionReports"><cms:DocumentAttachments ID="ucDocAttachmentReports" PageSize="100"  runat="server" GetBinary="false"  StopProcessing="true" /> </div>
    </div>
    <div class="selectedElectionInfo elem-to-hide selectedContent-4">
       <div class="col-xs-12 photosLabel"><%# Localize("{$files$}") %></div>
       <div class="col-xs-12 selectedContent-4 ElectionFiles"><cms:DocumentAttachments ID="ucDocAttachmentFil" PageSize="100" runat="server" GetBinary="false" StopProcessing="true" /> 
         </div>
    </div></div>

但问题是系统现在正在返回内存不足异常,这在一段时间内是暂时的,但现在网站根本没有处理,我很难找到原因,因为系统工作正常对于某些数据,经过一定的刷新后,它会返回相同数据的异常,因此是随机的,这是事件日志的屏幕截图:

回看后面的代码发现异常在这一行执行:ucRepeater.DataSource = ucDataSource.DataSource;

有人知道出了什么问题,我该如何解决?

【问题讨论】:

    标签: exception out-of-memory repeater transformation kentico


    【解决方案1】:

    您可以在此处继续在原始线程中发帖,即使它是答案:

    https://devnet.kentico.com/questions/system-outofmemoryexception

    如果二进制文件没有永久修复它,并且如果您仍然有内存问题,如果您的内存普遍不足,我会查看数据库或 Web 服务器。

    同时检查系统 > 常规并查看缓存中使用了多少内存,如果您缓存的内存过多,可能会导致内存达到其限制。

    【讨论】:

    • 谢谢特雷弗,好吧,不,我尝试添加“GetBinary = false”并且它工作了很短的时间,然后它又回到了同样的异常,经过一些数据填充,实际上我不这么认为和物理内存有关,根据这个链接stackoverflow.com/questions/1153702/…,你还有什么意见吗?
    • 你好特雷弗,你没有回复我,我仍然面临同样的问题,你还有其他建议可以帮助我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2014-03-29
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多