小编Can*_*cer的帖子

使用DirectorySearcher.FindAll()时内存泄漏

我有一个漫长的运行过程,需要经常在Active Directory上进行大量查询.为此,我一直在使用Directory.DirectoryServices命名空间,使用DirectorySearcher和DirectoryEntry类.我注意到应用程序中存在内存泄漏.

可以使用以下代码复制:

while (true)
{
    using (var de = new DirectoryEntry("LDAP://hostname", "user", "pass"))
    {
        using (var mySearcher = new DirectorySearcher(de))
        {
            mySearcher.Filter = "(objectClass=domain)";
            using (SearchResultCollection src = mySearcher.FindAll())
            {
            }            
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

这些类的文档说如果没有调用Dispose(),它们将泄漏内存.我试过没有处理过,它只是泄漏了更多的内存.我用框架版本2.0和4.0测试了这个以前有人遇到过这个吗?有没有解决方法?

更新:我尝试在另一个AppDomain中运行代码,它似乎也没有帮助.

.net c# directoryservices memory-leaks adsi

25
推荐指数
2
解决办法
1万
查看次数

使用KnockoutJS进行渐进式增强

假设我们的数据如下

var data = {
  facets: [{
    name : "some name",
    values: [{
      value: "some value" 
    }]
  }]
};
Run Code Online (Sandbox Code Playgroud)

我们可以很容易地将其表示为绑定到挖空模板的视图模型,如下所示:

<ul data-bind="foreach: facets">    
  <li>      
    <span data-bind="text: name"></span>
    <ul data-bind="foreach: values">            
      <li data-bind="text: value"></li>     
    </ul>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

问题是,在使用渐进增强时,我们如何才能获得相同的结果?这是通过最初在服务器端渲染模板然后将挖空模板和视图模型绑定到该渲染.

一个简单的服务器端模板看起来像这样:

<ul>    
  <li>      
    <span>some name</span>
    <ul>            
      <li>some value</li>       
    </ul>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我探讨了几种不同的可能性:

  • 一个是创建一个淘汰模板和一个服务器端模板,并通过解析服务器端模板的DOM来动态生成Knockout视图模型.这样,启用JavaScript时,只有Knockout模板可见,并且如果禁用JavaScript,则只有服务器端模板可见.它们的样式可以使它们看起来完全相同.

  • 另一种方法是将facets数组中的每个项目的绑定分别应用于该方面的现有DOM元素.但是,这仍然只有一个深度,并不适用于嵌套元素.

这些方法都不是很干净.另一种解决方案可能是编写一个自定义绑定来处理整个渲染并尽可能重用现有元素.

还有其他想法吗?

javascript progressive-enhancement knockout.js

19
推荐指数
1
解决办法
2645
查看次数

具有非null保护子句的自动实现的属性?

我同意马克·西曼的观点,即自动属性在某种程度上是邪恶的,因为它们打破了封装.但是,我确实喜欢它们带来的简洁语法,可读性和便利性.

我引用:

public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

代码片段的问题并不在于它包含太多的仪式.问题是它破坏了封装.事实上

"[...] getter和setter没有实现封装或信息隐藏:它们是一种语言合法化的方式来违反它们."

James O. Coplien和GertrudBjørnvig.精益建筑.威利.2010. p.134.

大多数情况下,添加一个非null保护子句对于属性设置器来说已经足够了,我想知道是否有比下面的更好的方法.更好的是,我的意思是更简洁/更少重复.

使用代码合同:

private string _username;
public virtual string Username
{
    get { return _username; }
    set 
    {  
        Contract.Requires(value != null);
        _username = value; 
    }
}
Run Code Online (Sandbox Code Playgroud)

使用vanilla .NET:

private string _username;
public virtual string Username
{
    get { return _username; }
    set 
    {
        if (value == null) throw new ArgumentNullException("Username");
        _username = value; 
    }
}
Run Code Online (Sandbox Code Playgroud)

c# automatic-properties code-contracts guard-clause

16
推荐指数
1
解决办法
4187
查看次数

lambda的序列化和反序列化

以下代码抛出

Exception in thread "main" java.lang.ClassCastException: test.Subclass2 cannot be cast to test.Subclass1
at test.LambdaTest.main(LambdaTest.java:17)
Run Code Online (Sandbox Code Playgroud)
public class LambdaTest {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ToLongFunction<B> fn1 = serde((ToLongFunction<B> & Serializable) B::value);
        ToLongFunction<C> fn2 = serde((ToLongFunction<C> & Serializable) C::value);
        fn1.applyAsLong(new B());
        fn2.applyAsLong(new C()); // Line 17 -- exception here!
    }

    private static <T extends Serializable> T serde(T t) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        new ObjectOutputStream(bos).writeObject(t);
        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos
                .toByteArray()));
        return (T) …
Run Code Online (Sandbox Code Playgroud)

java java-8

15
推荐指数
1
解决办法
665
查看次数

如何在cookie中存储对象?

虽然这在C#中是可能的:(在这个例子中,User是一个L2S类)

User user = // function to get user
Session["User"] = user;
Run Code Online (Sandbox Code Playgroud)

为什么这不可能?

User user = // function to get user
HttpCookie cookie = new HttpCookie();
cookie.Value = user; 
Run Code Online (Sandbox Code Playgroud)

怎么做呢?我不想将用户的id存储在cookie中,然后进行一些验证.

顺便说一句,如果可能的话,将对象存储在cookie中而不仅仅是ID是安全的吗?

c# cookies session store object

14
推荐指数
2
解决办法
4万
查看次数

等于实现NHibernate Entities,unproxy问题

在NHibernate 3.0 Cookbook中,有一个基本实体类型的示例实现.equals实现如下:

public abstract class Entity<TId>
{
  public virtual TId Id { get; protected set; }

  public override bool Equals(object obj)
  {
    return Equals(obj as Entity<TId>);
  }

  private static bool IsTransient(Entity<TId> obj)
  {
     return obj != null && Equals(obj.Id, default(TId));
  }  

  private Type GetUnproxiedType()
  {
     return GetType();
  }  

  public virtual bool Equals(Entity<TId> other)
  {
    if (other == null) return false;            
    if (ReferenceEquals(this, other)) return true;

    if (!IsTransient(this) && !IsTransient(this) && Equals(Id, other.Id))
    {
      var otherType = other.GetUnproxiedType();
      var thisType …
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate

12
推荐指数
1
解决办法
3572
查看次数

NHibernate复合键与复合唯一约束

当使用NHibernate时,如果我有一个具有唯一约束的实体并且可以通过该约束唯一地识别,那么将约束表示为复合键还是具有单独的Id字段并具有复合唯一约束更好?我一直在读,如果它可以帮助使用复合键和NHibernate被认为是"坏",并且只应在使用旧数据库时使用.

将设置映像如下:

class Book
{
   public virtual int Id { get; protected set; }
   public virtual string Author { get; set; }
   public virtual IList<BookEdition> Editions { get; set; } //HasMany (one to many)
}

class BookEdition
{
   public virtual string Title { get; set; }
   public virtual string Language { get; set; }
   public virtual int Edition { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这里我们对BookEdition有一个约束,它对语言和版本有一个限制,即不能用同一种语言有两个版本的书.任何版本也可以通过版本号和语言进行唯一标识.

在NHibernate中哪种方法被认为更好?使用Language/Edition作为复合Id或为BookEdition引入Id变量并改为使用复合唯一约束?

.net c# nhibernate

9
推荐指数
1
解决办法
1904
查看次数

如何使用.net库生成强命名SNK密钥文件

我的产品需要能够生成.snk文件(不需要在系统上安装Microsoft SDK).我可以生成一个工作的SNK文件,但是在指定密码时我似乎无法使其工作.谁能给我一些指示?这是我到目前为止:

    internal static void CreateKeyPairFile(string fileName, int keySize, string password)
    {
        if ((keySize % 8) != 0)
        {
            throw new CryptographicException("Invalid key size. Valid size is 384 to 16384 mod 8.  Default 1024.");
        }

        CspParameters parms = new CspParameters();
        parms.KeyNumber = 2;
        if (null != password)
        {
            var passwordString = new System.Security.SecureString();

            foreach (char c in password)
            {
                passwordString.AppendChar(c);
            }
            parms.Flags = CspProviderFlags.UseUserProtectedKey;
            parms.KeyPassword = passwordString;
        }
        RSACryptoServiceProvider provider = new RSACryptoServiceProvider(keySize, parms);

        byte[] array = provider.ExportCspBlob(!provider.PublicOnly);

        using (FileStream …
Run Code Online (Sandbox Code Playgroud)

c# strongname cryptography snk

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

取消下拉列表更改事件时如何设置以前的值

我正在设计一个html页面.我想显示一个关于使用jquery或javascript更改下拉元素的确认消息.请帮忙做到这一点.

我有代码,会要求确认.选择取消时,它不会选择下拉项的前一项.

$("#dropdownId").change(function(e) 
{
        if($(this).val() == "40")
        {
            if(confirm("Are you sure"))
                return true;
            else
                return false;
        }
});
Run Code Online (Sandbox Code Playgroud)

谢谢

html javascript jquery

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

跨平台Windows/OS X开发,具有大量现有代码库

对于使用MFC和WinAPI以C++编写的复杂应用程序,存在大量现有代码库,需要将其移植到Mac OS X.理想的解决方案是在不同平台之间使用尽可能多的代码,尤其是业务等代码逻辑.GUI可能会有所不同,具体取决于跨平台GUI可用的好工具.有一些低级别的OS调用在不同平台上会有所不同.主要目标不是最终​​需要单独开发和维护的两个单独版本的软件.

我一直在看Qt,但我很想知道其他的替代方案,以及人们过去如何解决这个问题.

  • 如果您要移植用MFC编写的现有应用程序,您将使用什么/如何使用它?
  • 如果您可以在两个平台上从头开始项目,您会使用什么/如何做?

c++ macos mfc cross-platform

6
推荐指数
1
解决办法
855
查看次数