小编Pau*_*ith的帖子

HttpModule.Init - 在IIS7集成模式下安全地添加HttpApplication.BeginRequest处理程序

我的问题类似但不完全相同:

为什么我的主机(softsyshosting.com)不支持BeginRequest和EndRequest事件处理程序?(我也读过其中引用的mvolo博客)

目标是成功地在IHttpModule.Init事件(或模块内部的任何地方)中挂钩HttpApplication.BeginRequest,使用通过system.webServer配置集成的普通HttpModule,即不会:

  1. 入侵Global.asax或
  2. 覆盖HttpApplication(该模块旨在自包含和可重用,所以例如我有这样的配置):

    <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="TheHttpModule" />
      <add name="TheHttpModule" type="Company.HttpModules.TheHttpModule" preCondition="managedHandler" /> 
    
    Run Code Online (Sandbox Code Playgroud)

到目前为止,我试图将一个监听器附加到HttpApplication.BeginRequest的任何策略都会产生以下两种情况之一:症状1是BeginRequest永远不会触发,或者症状2是所有托管请求都抛出以下异常,我不能从用户代码中捕获并处理它:

Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.PipelineModuleStepContainer.GetEventCount(RequestNotification notification, Boolean isPostEvent) +30
System.Web.PipelineStepManager.ResumeSteps(Exception error) +1112
System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) +113
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +616
Run Code Online (Sandbox Code Playgroud)

app.BeginRequest += new EventHandler(this.OnBeginRequest)在Init中注释会停止例外.Init根本不引用Context或Request对象.

我试过了:

  • 在项目的任何位置删除对HttpContext.Current的所有引用(仍然是症状1)
  • 测试从我的OnBeginRequest方法的主体中删除所有代码,以确保问题不在方法的内部(=异常)
  • 嗅探堆栈跟踪并仅调用app.BeginRequest + = ...如果堆栈未由InitializeApplication启动(= BeginRequest未激活)
  • 仅在第二次通过Init时调用app.BeginRequest + =(= BeginRequest未触发)

有人知道一个好方法吗?在模块中挂钩Application_Start是否存在一些间接策略(似乎不太可能)?另一个事件:a)可以从模块的构造函数或Init方法挂钩,以及b)随后是附加BeginRequest事件处理程序的安全位置?

非常感谢

c# iis-7 httpmodule integrated-pipeline-mode

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

是否有人围绕StringBuilders或Streams实现了正则表达式和/或Xml解析器?

我正在构建一个压力测试客户端,它使用尽可能多的线程来锤击服务器并分析响应,因为客户端可以集合.我经常发现自己受到垃圾收集(和/或缺乏收集)的限制,并且在大多数情况下,它归结为我实例化的字符串,只是将它们传递给Regex或Xml解析例程.

如果您对Regex类进行反编译,您将在内部看到它使用StringBuilders来执行几乎所有操作,但是您不能传递给字符串构建器; 在开始使用私有方法之前,它有助于深入研究私有方法,因此扩展方法也不会解决它.如果您想从System.Xml.Linq中的解析器中获取对象图,则处于类似情况.

这不是一个迂腐过度优化的案例.我查看了StringBuilder问题和其他问题中的正则表达式替换.我还介绍了我的应用程序,看看天花板的来源,Regex.Replace()现在使用确实在方法链中引入了大量开销,我试图以每小时数百万的请求命中服务器,并检查XML响应中的错误和嵌入式诊断代码.我已经摆脱了限制吞吐量的所有其他低效率,并且当我不需要捕获组或反向引用时,我甚至通过扩展StringBuilder来进行通配符查找/替换,从而减少了大量的Regex开销.但在我看来,现在有人会把自定义的StringBuilder(或更好的,基于Stream)的Regex和Xml解析实用程序包起来.

好吧,如此咆哮,但我自己必须这样做吗?

更新:我找到了一个解决方法,将峰值内存消耗从几千兆字节降低到几百兆,所以我将其发布在下面.我不是把它作为答案添加因为a)我一般不喜欢这样做,而且b)我仍然想知道是否有人花时间定制StringBuilder来做Regexes(反之亦然).

在我的情况下,我无法使用XmlReader,因为我正在摄取的流包含某些元素中的一些无效二进制内容.为了解析XML,我必须清空这些元素.我以前使用单个静态编译的Regex实例进行替换,这就像疯了一样消耗内存(我正在尝试处理~300个10KB docs/sec).大幅减少消费的变化是:

  1. 在CodeProject上的这篇StringBuilder Extensions文章中添加了代码,以获得方便的IndexOf方法.
  2. 我添加了一个(非常)粗略的WildcardReplace方法,每次调用允许一个通配符(*或?)
  3. 我用一个WildcardReplace()调用来替换正则表达式的用法,以清空有问题的元素的内容

这是非常不合适的,仅在我自己的目的要求下进行测试; 我会让它更优雅和强大,但YAGNI和所有这一切,我很匆忙.这是代码:

/// <summary>
/// Performs basic wildcard find and replace on a string builder, observing one of two 
/// wildcard characters: * matches any number of characters, or ? matches a single character.
/// Operates on only one wildcard per invocation; 2 …
Run Code Online (Sandbox Code Playgroud)

c# regex stringbuilder

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

SqlBulkCopy.WriteToServer无法可靠地服从BulkCopyTimeout

我需要计算来自SqlBulkCopy的顺序超时异常.为了测试这一点,我使用外部应用程序启动事务并锁定目标表.

只有在第一次调用时,SqlBulkCopy会在预期时抛出超时异常.我们尝试过使用外部连接和事务,以及使用连接字符串和内部事务.使用外部连接和事务,无限等待从未打开连接或开始或提交事务,但总是在.WriteToServer().

是否有一些方法SqlBulkCopy.WriteToServer()可以在达到.BulkCopyTimeout极限时可靠地抛出超时异常?

public void BulkCopy(string connectionString, DataTable table, int bulkTimeout)
{
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(
        connectionString, 
        SqlBulkCopyOptions.UseInternalTransaction))
    {
    bulkCopy.BulkCopyTimeout = bulkTimeout;//e.g. 120 sec.
    //... fill with data, map columns...
    bulkCopy.WriteToServer(table);
    // ^^^^ waits indefinitely, doesn't throw until *after*
    //      the lock is released.
    }
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢让异常冒泡而不是在using块的范围内处理它们,但我总是可以重新抛出.非常感谢任何见解.

更新1:

仍然没有决议.虽然发现了有趣的行为 - 正常的SqlCommand会在同一个锁中抛出一个TimeoutException,导致SqlBulkCopy.WriteToServer方法无限期挂起.

以下是我们尝试过的方法 - 这些方法都失败了 - 让SqlBulkCopy.WriteToServer在预期时始终如一地抛出超时:

  • MARS(多个活动结果集)开/关
  • TableLock on vs. off
  • 目标作为堆表与索引表
  • 更长/更短的BulkTimeout值(10秒到5分钟)
  • 内部与外部交易

现在,作为一种解决方法,我交替使用a)将WriteToServer调用放在异步包装器中,以便我自己计时,b)只调用WriteToServer一次; 超时后,等到常规SqlCommand 成功再次尝试WriteToServer之前.使用这些方法,我至少能够控制执行流程.

.net c# timeout sqlbulkcopy sql-server-2008

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

git local master branch停止跟踪remotes/origin/master,无法推送

就在我以为我得到了git checkout -b newbranch - commit/commit/commit - git checkout master - git merge newbranch - git rebase -i master - git push工作流在git中,某些东西爆炸了,我看不出任何理由.

这是一般工作流程,过去对我有用:

# make sure I'm up to date on master:
$ git checkout master
$ git pull # k, no conflicts
# start my new feature
$ git checkout -b FEATURE9 # master @ 2f93e34

Switched to a new branch 'FEATURE9'
Run Code Online (Sandbox Code Playgroud)

...工作,提交,工作,提交,工作,承诺......

$ git commit -a
$ git checkout master
$ git merge FEATURE9
$ git …
Run Code Online (Sandbox Code Playgroud)

git git-branch

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

科技创业公司使用.NET进行(或保持)的有力例子?

我正在寻找充满活力,可获得(或获得)技术问题的具体示例,尤其是初创公司,他们选择在Microsoft堆栈上构建并成功或看起来可能.

Writely是一个明显的例子,NewsGator,PageFlakes和StackOverflow本身也是如此.

我并不是说这是一场语言辩论.我希望这个问题对SO来说不是太主观; 我和我合作的团队从这里可以找到的编码窘境解决方案中获益匪浅,而且我希望能够最好地回答这个问题的人经常访问这个网站.

为了使问题更加具体,让我们假设您是一名.NET专家,并且是处于转折点的初创公司的成员.这个转折点可能会也可能不会涉及平台的转变.避免主观论点,可以量化的例子 - 公司或案例研究 - 你能否指向支持继续使用.NET?(山谷中的例子除外.)

.net

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

查找A&B的不同合格组合,以及多对多A:B排除

对于所有关于SO的"独特组合"和"笛卡尔产品"问题,我确信这个问题有一个名称和规范解决方案,但我并没有提出来.

更新......这是一个可能更好的例子:假设一个俱乐部有定期的抽奖活动.每个活动抽奖很多项目,会员每个项目购买门票.在抽奖的夜晚,抽奖经理打印出批量的名片,批次A,B,​​C等.当每件物品都被抽出时,他会将这些预先组装好的批次中的一个扔进料斗,混合起来,然后画一个名字.在赠送奖品之后,该名称将重新进入批次,如果任何其他项目恰好具有相同批次的参赛者,则重复使用该批次.问题:是否有无状态算法可以组装成批的名片,打印最少的卡片总数?[如果没有,Chris Shain的HashSet <>示例是我所知道的最有效的有状态替代方案.]

原始问题和示例:考虑以下人员,三明治和过敏症列表(存储关系;这些数据结构只是为了保持帖子简短,并不是问题或解决方案的固有内容):

var people = { "Pete", "Barb", "Debbie", "Frank", "Ralph", "Sally" };
var sandwiches = { "Peanut Butter", "Egg Salad", "Tuna Salad", "Oven Roasted Chicken", "Gluten-free Twigs" };
var allergies = {
    { "Pete", null }, 
    { "Barb", { "Peanut Butter" } }, 
    { "Debbie", { "Peanut Butter", "Egg Salad", "Tuna Salad" } }, 
    { "Frank", { "Egg Salad", "Tuna Salad" } }, 
    { "Ralph", { "Oven Roasted Chicken" } },
    { "Sally", { …
Run Code Online (Sandbox Code Playgroud)

c# combinations many-to-many distinct

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

已编译 Dynamic Linq Func&lt;&gt; *没有* 参数的缓存委托?

我使用 Dynamic LINQ 库中的 Dynamic.ParseLambda 方法来创建表达式,将每个表达式编译为 Func<>,并将每个表达式缓存在字典中:

// parse some dynamic expression using this ParseLambda sig:
Expression<Func<TArgument,TResult>> funcExpr = 
 System.Linq.Dynamic.ParseLambda<TArgument, TResult>(
  expressionString, // string for dyn lambda expression
  parameters);  // object[] params

// then compile & cache the output of this as a delegate:
Func<TArgument,TResult> func = funcExpr.Compile(); //<-cache this

// then to execute, use:
return func(entityInstance);
Run Code Online (Sandbox Code Playgroud)

问题是,这迫使我为每个不同的参数值集缓存不同的委托实例。这看起来有点浪费;Dynamic LINQ 的所有开销都在解析和编译中;一旦创建,委托的性能就接近于直接编码的 lambda。有没有什么方法可以将参数移到表达式之外,以便我可以在调用它时(而不是在创建它时)将不同的值传递给公共缓存委托

// e.g. with params...
return func(entityInstance,parameters);

// or if params are the issue, multiple signatures are ok:
return …
Run Code Online (Sandbox Code Playgroud)

c# linq dynamic

4
推荐指数
1
解决办法
1189
查看次数

比试错更有效地优化多个变量的算法

Google对此的结果似乎需要比我所熟悉的更高级的数学(而且我可能不比五年级学生更聪明,但我无意找出答案)。

我正在寻找一种解决多元优化问题的通用方法,最好是在c#中,而不必深入研究矩阵和特征向量以及正态分布。

说我有数字变量XŸžw ^,和功能˚F这样w = f(x, y, z)。我想最大化w,然后...

  • f 未知
  • 相互依赖之间xy和/或z,如果有,是未知的
  • 在某些情况下,我只有事后数据集
  • 在其他情况下,我可以改变xy然后按需z重新采样w
  • 在先验的情况下,理想的算法最大化w与最少试验排列xyz,和每一轮抽样之后选择用于每个的下一个值

我对自变量有一个大概的最小和最大界限。我当然不想采样超出必要的排列空间。我喜欢的算法以具有至少为检测最突出的共同的依赖关系,例如一个粗的能力,收益递减时x> 2y,或在实际的劣化w的当总和xyz超过一定天花板等

我看过的大多数数学库都假设我知道如何在Boigenfoodle Continuum上执行量子nergenflip投影,而我只是不在那里。一个非数学家的编码器将如何做到这一点?

c# algorithm optimization multivariate-testing

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

Excel:记住文本到列,如何禁用?

我已将文本从 pdf 文件复制到 Excel(2010)。我使用“文本到列”来创建单独的列。

现在我已经完成了这部分任务,我想将另一段文本粘贴到同一个文件中。

但现在 Excel 直接使用我用来分割这个新文本的文本到列,我现在(显然)不想分割它。我尝试将文本粘贴到新工作表上。我尝试将这段文本粘贴到新的工作簿中,但文本仍然被excel直接分割。

我尝试粘贴为文本,并尝试粘贴为 Unicode 文本。但到目前为止,我还没有找到解决这个问题的方法。如何让 Excel“忘记”它已将文本拆分为列?

excel text multiple-columns excel-2010 pasting

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

WHILE循环中的FOR循环

我已经看到了解决这个问题部分的其他问题,但我没有看到完成整个问题的解决方案.当然,在命令处理器中没有"while"这样的东西,并且因为goto:line语句突破了所有循环,所以在继续下一个值之前,它不是在特定持续时间内迭代某些值集的选项.

这是我正在寻找的逻辑流程的伪代码; 命令处理器阻止了我到目前为止运行它的尝试.你将如何构建这个(除了抛弃批处理脚本并转到c#或其他东西)?

伪代码:

SET %%durationMinutes=60
FOR %%X IN (10 20 40 80 160 200 0) DO (
  :: calculate elapsed minutes...
  WHILE %elapsedMinutes < %%durationMinutes DO (
    :: unrelated hocus pocus here, uses %%X as a variable
    call :foo %%X 
    // can't use goto to simulate the WHILE loop since it breaks %%X, so...?
  )
)
Run Code Online (Sandbox Code Playgroud)

windows loops for-loop batch-file

3
推荐指数
1
解决办法
8331
查看次数

编辑器在没有@foreach的情况下不渲染可枚举

这是令人费解的.为简单起见,想象一下具有.Employees可枚举属性的Company实体.我已经在其他地方看到,使EditorTemplates能够合理地呈现可枚举的技巧是使用这样的语法:

在Index.cshtml中:

@Html.EditorFor(company => company.Employees, "EmployeeEditorTemplate") 
Run Code Online (Sandbox Code Playgroud)

EmployeeEditorTemplate.cshtml需要一名员工:

@model MyNamespace.Models.Employee
//...
@Html.EditorFor(x => x.FullName)
// ...etc.
Run Code Online (Sandbox Code Playgroud)

像这样的帖子:Viewmodels列表在行动中是空的 ...表明模型绑定器足够聪明,可以找出绑定并动态索引可枚举.我得到了不同的结果(正如我所期望的那样,如果模型绑定器不应该是如此mageriffic):

The model item passed into the dictionary is of type 
System.Collections.Generic.List`1[MyNamespace.Models.Employee]', 
but this dictionary requires a model item of type 
'MyNamespace.Models.Employee'.
Run Code Online (Sandbox Code Playgroud)

自己枚举它会使集合很好,但是为每一行的控件发出相同的id(当然,这不是最佳的,但它告诉我EditorTemplate在功能上是正确的):

@foreach (var item in Model.Employees)
{
    @Html.EditorFor(x => item, "EmployeeEditorTemplate")
}
Run Code Online (Sandbox Code Playgroud)

此构造也无法发布company.Employees集合回到我的其他控制器操作.

有关实现以下目标所需要的任何想法?

  • 使用列表中的每个实例呈现具有唯一ID的子集合
  • 使用模型将子集合发回

我不在乎我是否必须自己列举它,也不管它是在EditorTemplate内部还是外部; 我刚刚看到它说这是不必要的,如果你让它处理事情,MVC会更好.谢谢.

asp.net-mvc mvc-editor-templates razor asp.net-mvc-4

3
推荐指数
1
解决办法
2190
查看次数

使用64位有符号值在SQL和C#中模拟128位无符号整数?

采用这种情况:您在C#中绑定了一些标记枚举(并且实际上是从SQL Server中的Enum-ish表生成).假设您是经销商,并允许您的经销商指定他们发货的美国州.作为一名出色而优雅的软件工程师,您将这些作为可按位组合的标志值实现以节省存储:

create table USState (
    StateID bigint, StateAbbr char(2), StateName varchar(50))
/* insert all US States + DC into USState, StateIDs must be in powers of two */ 
/* StateID 0 reserved for 'None': */
create procedure GetStatesByFlag (@StateFlags bigint) as
declare @StateIDs table
(
StateID bigint,
primary key (StateID)
)
insert into @StateIDs 
    select StateID 
    from USState
    where @StateFlags & StateID != 0
        or (@StateFlags = 0 and StateID = 0)

select s.StateID, s.StateAbbr, s.StateName 
from 
    USState s …
Run Code Online (Sandbox Code Playgroud)

c# sql flags bit-manipulation

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