小编Han*_*ber的帖子

为什么这段代码导致内存泄漏?

我最近取得了WCF Windows服务的所有权,该服务大量使用以下静态Utility类来检索查找数据:

   public static class Utility
    {

       //begin code that causes increased memory consumption
        private static Dictionary<string, ErrorData> _errorData;

        internal static Dictionary<string, ErrorData> ErrorData

        {
            get
            {
                if (_errorData == null)
                {
                    _errorData = GetErrorData();
                }
                return _errorData;
            }

        }
        //end code that causes increased memory consumption

        /// GetErrorData method to get error messages from error xml
        /// </summary>         
        /// <returns>Dictionary of Error messages value for different fields.</returns>           
        internal static Dictionary<string, ErrorData> GetErrorData()
        {
            Dictionary<string, ErrorData> data = null;


                XmlDocument …
Run Code Online (Sandbox Code Playgroud)

debugging wcf static memory-leaks

8
推荐指数
1
解决办法
1436
查看次数

ASP.NET-强制子/容器事件在父onload之前触发?

我正在研究一种问卷类型的应用程序,其中问题存储在数据库中.因此,我在每个Page.OnLoad上动态创建我的控件.这就像一个魅力,并且在回发之间保持ViewState,因为我确保我的动态控件始终具有相同的生成Control.ID.

除了动态填充问题的用户控件之外,我的问卷页面还包含一个"状态"部分(也由用户控件封装),表示问卷的状态(选项为"完成","已启动"或"在进展').如果用户更改问卷状态(即从"进行中"更改为"完成"),我需要回发到服务器,因为问卷的动态部分的内容取决于所选状态.

无论状态如何,一些问题始终存在,而其他问题可能根本不存在于所选状态.关键是,当状态发生变化时,我必须回发到页面并呈现正确的问题集.此外,我需要为那些"始终可用"的问题保留任何用户输入的值.

但是,由于ASP.NET中的页面生命周期,"状态"用户控件的OnLoad(包含从DB加载正确问题所需的正确状态)在"动态问题"用户控件之后才会执行已填充(错误/陈旧值).

为了解决这个问题,我将一个事件从我的"状态"用户控件引发到主页面,以指示状态已更改.然后主页面在"动态问题"用户控件上引发一个事件.因为当这个事件冒出来时,"动态问题"用户控件已经从DB加载了"错误"的问题,它首先调用Controls.Clear.然后,它愉快地使用新状态来查询数据库中的"正确"问题,并在每个问题上执行Control.Add().仅供参考,Control.ID在回发中保持一致.

这个解决方案有效......分类.确定了所选状态的正确问题集; 然而,ViewState因为"永远可用"的问题而迷失了方向.我猜这是因为"动态问题"用户控件在响应状态更改事件时调用Controls.Clear.这必须以某种方式杀死ViewState和我的动态控件之间的关联,即使Control.ID是一致的.

这似乎是一个常见的要求,我几乎可以肯定,有一个更好,更清洁,更不容易出错的方法来实现这一目标.如果它不明显,尽管在去年使用它,我还是无法理解ASP.NET页面的生命周期.任何帮助深表感谢!

asp.net viewstate events page-lifecycle dynamic

7
推荐指数
1
解决办法
2008
查看次数

如何管理(或消除)并行类层次结构?

我正在设计一个简单的表单创建引擎,用户可以使用各种样板字段类型(Date,Text,DropDown)组合新表单

我决定对域对象(表单字段)进行建模,而不依赖于用于将这些字段呈现给UI的对象.

这是定义域的合同及其某些特化的接口:

namespace Acme.Core.Domain{
    public interface IFormField
            {
                bool Visible { get; set; }
                string Key { get; set; }
                event EventHandler<FieldVisibilityChangedEventArgs> VisibilityChanged;
                FieldType Type{get;}
                void Validate(IEnumerable<ValidationError> errors);
                int DataId {get;set;}
            }

    public interface IDropDownField:IFormField{

                IDictionary<string, string> Items { get; set; }
                KeyValuePair<string, string> SelectedValue { get; set; }

        }
     public interface IDateField:IFormField{

                DateTime? SelectedDate{get;set}

        }
}
Run Code Online (Sandbox Code Playgroud)

对于UI方面,我构建了一个并行类型层次结构.这使得与数据验证相关的业务规则的域对象与UI关注点分开,即如何呈现给定字段(MVC HtmlHelper vs WebForm WebControl):

namespace Acme.UI{

        public interface IControl 
        {
                //parallel to IFormField
                bool Visible { get; set; }
                string ID …
Run Code Online (Sandbox Code Playgroud)

oop inheritance design-patterns

5
推荐指数
1
解决办法
1045
查看次数