我有一个WPF音频应用程序.
偶尔(甚至在调试器中)我看到一个NullReferenceException没有堆栈跟踪信息.
如何开始调试这样的问题?
一些背景:
我是P/Invoking函数,WinMM.dll其中涉及在调用时注册回调waveOutOpen
[DllImport("winmm.dll")]
public static extern MmResult waveOutOpen(out IntPtr phwo, IntPtr uDeviceID, WaveFmt pwfx, WaveCallbk dwCallback, IntPtr dwInstance, int fdwOpen);
Run Code Online (Sandbox Code Playgroud)
事实证明这很难稳定,尤其是在我打电话的时候waveOutClose,并立即waveOutOpen再次调用(通常是改变输出格式).
我怀疑这个问题可能与我上面描述的调用有关(尽管知识很少,我可能完全偏离目标).
重现问题目前证明是难以捉摸的,尽管我可以为一直看到这个问题的用户提供构建.我可能会尝试加快导致问题的操作,以便在调试器中重现问题更加确定.
关于调试器,我没有修改任何设置(包括Enable unmanaged code debugging)或任何Debug -> Exceptions...设置.说实话,我对这里提供的内容毫无头绪,所以任何提示都是受欢迎的.
异常怎么可能没有堆栈跟踪?你以前见过这个吗?救命!
前段时间我想创建自己的数据映射器,它比平均ORM简单得多.这样做我发现需要访问我的基类中继承类的类型信息.我的第一个想法是反射,但它太慢了(如果你使用反射,请查看Fasterflect,因为它"几乎"消除了反射的性能问题).
所以我转向了一个解决方案,我后来发现它有自己的名字:奇怪的重复模板模式.这主要解决了我的问题,但学习如何正确实现这种模式有点挑战.我必须解决的两个主要问题是:
1)如何让我的消费代码与我的通用对象一起使用而无需知道创建对象的通用参数?
2)如何在C#中继承静态字段?
具有挑战性的部分实际上是在弄清问题.一旦我意识到我需要做什么,解决这些问题就很容易了.如果你发现自己需要CRTP,你可能会发现自己需要回答这些问题......它们似乎是相辅相成的.
所以我有一个用户收藏夹表.它们有几百万行.
目前,它们只有三列:id(pk),userId和someFkRef.有一个索引userId允许我快速选择用户的收藏夹.
目前这些是按顺序排序的id,实际上只是插入顺序.我们希望为用户提供重新订购收藏的机会,最有可能通过某种拖放式互动.
我的第一个(我怀疑天真)方法,这将是简单地增加一个order列,并在一个综合指数userId,order.但是,在反射时,当用户将其项目移动到列表上一定距离时,项目的起始位置和结束位置之间的所有中间行都需要order重新计算其列,因此也需要重新计算索引.
这(很可能)很糟糕.
在我花了很多年的时间试图量化到底有多糟糕之前,我想知道是否有一个更好的基于表格的表示,用我上面描述的各种操作来操作更便宜.
在我看来,这是一个随着SQL /数据库开发一直出现的问题,但后来我对这一切都不熟悉,所以请原谅我的无知.
我有2张桌子:
CREATE TABLE [dbo].[Tracks](
[TrackStringId] [bigint] NOT NULL,
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Time] [datetime] NOT NULL,
CONSTRAINT [PK_Tracks] PRIMARY KEY CLUSTERED
(
[Id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Tracks] CHECK CONSTRAINT [FK_Tracks_AudioStreams]
GO
ALTER TABLE [dbo].[Tracks] WITH CHECK ADD CONSTRAINT
[FK_Tracks_TrackStrings] FOREIGN KEY([TrackStringId])
REFERENCES [dbo].[TrackStrings] ([Id])
GO
ALTER TABLE [dbo].[Tracks] CHECK CONSTRAINT [FK_Tracks_TrackStrings]
GO
Run Code Online (Sandbox Code Playgroud)
和
CREATE …Run Code Online (Sandbox Code Playgroud) 我们正在运行需要与另一个进程快速通信的服务.目前,我们在缓冲模式下使用WCF NetNamedPipeBinding来调用服务中的方法,这似乎提供了可用WCF绑定的最小开销.使用托管代码有更快的方法吗?
编辑:以下建议的聚合请求是已考虑的选项.实际上,我们想知道是否存在一个替代API,用于使用命名管道优于WCF的进程间通信.
我们在domain.com上有一个网站,也可以通过www.domain.com的CNAME条目访问,该网站指向domain.com.我们希望所有访问www.domain.com的访问者都可以使用301重定向重定向到domain.com.在asp.net mvc中实现这个的最佳方法是什么?在global.asax?
我需要创建一个返回单个字符的随机字符生成器.字符应该在字母表的字母范围内,数字0到9,以及一些字符,如.?/ - .任何一个例子将不胜感激.
假设我有一个文本模板,其中包含许多需要填充的字段:
var template = "hello {$name}. you are {$age} years old. you live in {$location}"
Run Code Online (Sandbox Code Playgroud)
以及IDictionary<string,string>要替换的值:
key | value
===================
name | spender
age | 38
location| UK
Run Code Online (Sandbox Code Playgroud)
填充模板的天真方式可能是这样的:
var output = template;
foreach(var kvp in templValues)
{
output = output.Replace(string.format("{{${0}}}", kvp.Key), kvp.Value);
}
Run Code Online (Sandbox Code Playgroud)
然而,这看起来非常低效.有没有更好的办法?
所以我有一个UserProfile模型类作为SimpleMembership的一部分.在其中我需要存储另一个类型的DB中存在的遗留标识符char(36).我喜欢把它改成像一个独特的标识更合理的东西,但这超出了今天的活动范围.
我当前的注释创建了一个列 nvarchar(36)
[StringLength(36)]
public string UserIdentifier{ get; set; }
Run Code Online (Sandbox Code Playgroud)
我想要一列char(36)代替.这可能吗?
我有一个问题:
SELECT
someFields
FROM
someTable
WHERE
cheapLookup=1
AND (CAST(someField as FLOAT)/otherField)<0.9
Run Code Online (Sandbox Code Playgroud)
那么,CAST在这种情况下cheapLookup是否会执行和划分0?如果没有,在这种情况下如何避免计算?