小编Yan*_*nis的帖子

两个或更多属性的IQueryable订单

我目前正在使用IQueryable OrderBy方法订购自定义对象列表,如下所示:

mylist.AsQueryable().OrderBy("PropertyName");
Run Code Online (Sandbox Code Playgroud)

现在我希望按多个属性排序.有没有办法做到这一点?

谢谢,Yannis

c# linq sorting iqueryable c#-4.0

27
推荐指数
3
解决办法
3万
查看次数

在巨大的字符串中替换多个字符串的最快方法

我正在寻找替换大(~1mb)字符串的多个(~500)子串的最快方法.无论我尝试过什么,似乎String.Replace是最快的方式.

我只关心最快的方式.不是代码可读性,可维护性等.我不在乎我是否需要使用不安全的代码或预处理原始字符串.

编辑:评论后我添加了一些细节:

每次替换迭代都会将字符串上的ABC替换为其他字符串(每次替换迭代次数不同).要替换的字符串总是相同的 - ABC将始终是ABC.从不ABD.因此,如果有400.000数千个替换迭代.每次使用相同的字符串 - ABC - 将替换为其他(不同的)字符串.

我可以控制ABC是什么.只要它不影响结果,我可以使它超短或超长.显然,ABC不能打招呼,因为大多数输入字符串中都会出现hello.

输入示例: ABCDABCABCDABCABCDABCABCDABCD

示例替换为字符串: BC

示例替换为字符串: AA, BB, CC, DD, EE (5 iterations)

示例输出:

AAADAAAAAADAAAAAADAAAAAADAAAD
ABBDABBABBDABBABBDABBABBDABBD
ACCDACCACCDACCACCDACCACCDACCD
ADDDADDADDDADDADDDADDADDDADDD
AEEDAEEAEEDAEEAEEDAEEAEEDAEED
Run Code Online (Sandbox Code Playgroud)

平均情况:输入字符串为100-200kb,替换迭代次数为40.000次.最坏的情况:输入字符串是1-2mb,400,000次替换迭代.

我可以做任何事.并行做,不安全等等.我不知道怎么做.重要的是它需要尽可能快.

谢谢

c# string performance replace

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

如何在navigationController中按下控制器时隐藏父标签栏

我有一个带标签栏控制器的应用程序,每个视图都包含一个导航控制器.我的MainWindow如下所示:alt text http://www.freeimagehosting.net/image.php?7bc867a594.png

一切正常,但我注意到将详细信息视图推送到导航控制器时出现问题.在forSelectRowAtIndexPath中,对于属于选项卡栏控制器(图像中名为Latest)的tableviewcontroller,我这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ArticleViewController *articleController = [[ArticleViewController alloc] initWithNibName:@"ArticleView" bundle:nil];

    [self.navigationController pushViewController:articleController animated:YES];

    [articleController release];
    articleController = nil;
}
Run Code Online (Sandbox Code Playgroud)

}

ArticleViewController有自己的tabbar,因为它需要显示不同的东西.问题是,当我将ArticleViewController推入navigationController时,我会在视图底部看到两个标签栏.有什么办法可以解决这个问题吗?

提前致谢

iphone uitabbarcontroller uinavigationcontroller ios swift

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

来自队列的大对象堆和字符串对象

我有一个Windows控制台应用程序应该运行几天和几个月没有重新启动.该应用程序从MSMQ检索"工作"并进行处理.有30个线程同时处理工作块.

来自MSMQ的每个工作块大约为200kb,其中大部分分配在单个String对象中.

我注意到,在处理了大约3-4千个这些工作块之后,应用程序的内存消耗非常高,消耗了1到1.5 GB的内存.

我通过分析器运行应用程序并注意到大部分内存(可能是一个演出)在大对象堆中未使用但结构是分段的.

我发现这些未使用的(垃圾收集)字节中有90%是先前分配的字符串.我开始怀疑从MSMQ进来的字符串是分配,使用然后解除分配,因此是碎片的原因.

我明白像GC.Collect(2或GC.Max ...)这样的东西不会有用,因为它们是gc大对象堆但不压缩它(这是问题).所以我认为我需要的是缓存这些字符串并以某种方式重用它们,但由于字符串是不可变的,我将不得不使用StringBuilders.

我的问题是:无论如何都没有改变底层结构(即使用MSMQ,因为这是我无法改变的),并且仍然避免每次初始化一个新的String以避免分裂LOH?

谢谢,Yannis

更新:关于如何检索这些"工作"块

目前,它们作为WorkChunk对象存储在MSMQ中.这些对象中的每一个都包含一个名为Contents的String和另一个名为Headers的String.这些是实际的文本数据.如果需要,我可以将存储结构更改为其他内容,如果需要,我可以将基础存储机制更改为MSMQ以外的其他内容.

目前我们在工作节点方面

WorkChunk chunk = _Queue.Receive();

所以在这个阶段我们几乎无法缓存.如果我们以某种方式改变了结构,那么我想我们可以做一些进步.无论如何,我们必须解决这个问题,以便我们做任何需要做的事情,以避免浪费数月的工作.

更新:我继续尝试下面的一些建议,并注意到这个问题无法在我的本地计算机上运行(运行Windows 7 x64和64位应用程序).这使事情变得更加困难 - 如果有人知道为什么那么它真的有助于在本地重新调整这个问题.

.net c# memory-leaks memory-management large-object-heap

11
推荐指数
1
解决办法
2572
查看次数

多个网站,单点登录设计

我有个问题.我最近做过一些工作的客户有一系列具有不同登录机制的网站.他希望慢慢迁移到他的网站的单一登录机制(所有写入asp.net mvc).

我在这里查看我的选项,所以这里是一个要求列表:

  1. 它必须是安全的(duh)
  2. 它需要支持超出通常名称,地址内容(例如用户的金钱或信用)的额外用户属性
  3. 为了方便起见,它必须提供一个集中的用户管理Web控制台(我知道这将是一个小项目,除了我选择的任何设计解决方案)
  4. 它必须与现有网站集成,而无需重新设计整个产品(我知道这取决于当前的产品实现).
  5. 它必须处理用户注册时的电子邮件(以便他激活他的帐户)
  6. 当他点击电子邮件中的激活我链接时,它必须处理激活用户(我知道5和6需要某种形式的电子邮件模板系统来支持每个应用程序的不同电子邮件)

我正在考虑创建一个与表单身份验证一起工作的库,它可以公开所需的任何方法(例如登录,注销,激活等)以及通过电子邮件,注册处理等实现激活的小型宁静服务.

考虑到已经遗漏了许多东西以使这个问题简短而重要,这听起来像是一个好的设计吗?

但这看起来是一个非常普遍的问题,所以我可以使用任何现有的项目吗?

谢谢阅读.

c# asp.net-mvc forms-authentication single-sign-on

10
推荐指数
1
解决办法
5515
查看次数

将JSON字符串转换为JAVA中的通用对象(使用GSON)

我有一个返回JSON的Api.响应采用某种格式,可以放入一个名为ApiResult的对象中,并包含一个Context <T>和一个int代码.

ApiResult以通用方式声明,例如 ApiResult<SomeObject>

我想知道如何让GSON将传入的JSON字符串转换为 ApiResult<T>

到目前为止,我有:

Type apiResultType = new TypeToken<ApiResult<T>>() { }.getType();
ApiResult<T> result = gson.fromJson(json, apiResultType);
Run Code Online (Sandbox Code Playgroud)

但是这仍然会返回将Context转换为LinkedHashMap(我假设它是GSON回退的)

java gson

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

刷新页面时如何抑制重新发布 - ASP.NET MVC

我正在使用asp.net mvc构建一个向导.当前当用户点击下一个(或之前的)时,表单值被发布到执行任何所需处理的动作,然后呈现下一个视图.

我遇到的问题是,如果用户在新视图中点击刷新,则会提示他们重新发布表单值,这会导致大量问题.

在firefox中,我收到消息:"要显示此页面,应用程序必须发送信息,以重复之前执行的任何操作(例如搜索或订单确认)."

有没有办法阻止用户重新发回动作?

提前致谢.

asp.net asp.net-mvc asp.net-mvc-2

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

.NET MailMessage和AlternativeViews中的DKIM

我使用DKIM.NET(https://github.com/dmcgiv/DKIM.Net)在将MailMessage发送给收件人之前签名.我面临的问题是上面的组件标记MailMessage的Body(mailMessage.Body),而我以AlternativeViews的形式插入HTML和纯文本的内容.

结果是我的mailMessage.Body为null,但收到的messsage的正文包含我的替代视图,因此DKIM无法正确验证.

有什么方法可以解决这个问题吗?在将它们分配给MailMessage对象之前,可能会签署HTML和纯文本替代视图吗?或者可能使用其他组件?

编辑:

自从我开始这个问题以来,我已经在https://github.com/yannispsarras/DKIM-AlternativeViews创建了一个项目- 这绝不是完整或稳定的,但是我在这里发布它以防万一对任何想要的人都有用在.NET中找到已签名的替代视图的解决方案.

.net c# dkim

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

大对象堆中的大字符串会导致问题 - 但无论如何它必须以字符串形式结束

我在这里跟进这个问题

我遇到的问题是我有一些来自MSMQ的大型对象,主要是字符串.我已经将我的内存问题缩小到在大对象堆(LOH)中创建的这些对象,因此将其分段(在探查器的帮助下确认).

在我上面发布的问题中,我得到了一些解决方法,主要是将String拆分为char数组,我做了.

我面临的问题是,在字符串处理结束时(无论采用何种形式),我需要将该字符串发送到另一个我无法控制的系统.所以我想到以下解决方案将此字符串放在LOH中:

  1. 将其表示为每个小于85k的char数组数组(要放置在LOH中的对象的阈值)
  2. 在发送方端压缩它(即在我们在这里讨论的系统中接收它之前,它是接收方)并在将其传递给第三方系统之前将其解压缩.

无论我做什么 - 不管怎样 - String必须完整(没有char数组或压缩).

我被困在这里吗?我在想如果在这里使用托管环境是一个错误,我们是否应该咬紧牙关去寻找C++类环境.

谢谢,Yannis

编辑:我已经缩小的问题正好代码贴在这里

通过的大字符串放在LOH中.我从已经收到消息的点开始删除了每个处理模块,并且内存消耗趋势保持不变.

所以我想我需要改变这个WorkContext在系统之间传递的方式.

.net c# memory-management large-object-heap c#-4.0

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

在XHR请求上随机ERR_SPDY_PROTOCOL_ERROR

发布后,我们开始在生产应用程序中随机获得ERR_SPDY_PROTOCOL_ERROR.当我们得到它时,我们刷新浏览器几次,错误就消失了.我们无法真正重现错误,但我们设法捕获详细的chrome网络日志.请求的详细信息如下所示.

如果你知道我的意思,我希望得到别人的反馈或帮助,因为这是我希望自己不是开发人员的问题之一......

PS所涉及的技术都标记在这里.我们在后端使用react和后端的asp.net/servicestack.我们使用haproxy作为负载均衡器.我们只通过chrome看到此错误.

89365: URL_REQUEST https://api-domain.com/some/path?page=1&pageSize=10 Start Time: 2019-01-15 11:11:15.029 t=255420 [st=    0] +REQUEST_ALIVE [dt=10068]
                     --> priority = "MEDIUM"
                     --> url = "https://api-domain.com/some/path?page=1&pageSize=10" t=255421 [st=    1]    NETWORK_DELEGATE_BEFORE_URL_REQUEST  [dt=0] t=255421 [st=    1] 
+URL_REQUEST_START_JOB  [dt=10066]
                       --> load_flags = 17216 (DO_NOT_SAVE_COOKIES | DO_NOT_SEND_AUTH_DATA | DO_NOT_SEND_COOKIES | MAYBE_USER_GESTURE)
                       --> method = "GET"
                       --> url = "https://api-domain.com/some/path?page=1&pageSize=10" t=255421 [st=    1]      NETWORK_DELEGATE_BEFORE_START_TRANSACTION  [dt=0] t=255421 [st=    1]      HTTP_CACHE_GET_BACKEND  [dt=0] t=255421 [st=    1]     HTTP_CACHE_OPEN_ENTRY  [dt=0] t=255421 [st=    1]      HTTP_CACHE_ADD_TO_ENTRY  [dt=0] t=255421 [st=    1]      HTTP_CACHE_READ_INFO  [dt=0] t=255421 [st=    1] …
Run Code Online (Sandbox Code Playgroud)

.net asp.net google-chrome haproxy reactjs

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