基本上ASHX文件中存在简单的错误(比如缺少逗号或类似的东西).Visual Studio可以很好地完成所有操作,但是一旦访问该文件(由IIS托管),就会弹出一个错误.
有没有办法在MSBuild或Visual Studio中识别出这样的错误?
目标很简单 - 通过单元测试插入回滚数据.这是怎么回事.在单元测试中,调用一个方法来创建新连接并插入一些数据.之后,单元测试会创建一个新连接,并尝试查找插入的内容并断言.我希望用这两个东西包装TransactionScope,而不是调用Complete并看到插入的数据回滚.那没有发生.我做错了什么还是我错过了这一点?
using (new TransactionScope())
{
// call a method that inserts data
var target = new ....
target.DoStuffAndEndupWithDataInDb();
// Now assert what has been added.
using (var conn = new SqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
// Just read the data from DB
cmd.CommandText = "SELECT...";
conn.Open();
int count = 0;
using (var rdr = cmd.ExecuteReader())
{
// Read records here
...
count++;
}
// Expecting, say, 3 records here
Assert.AreEqual(3, count);
} …Run Code Online (Sandbox Code Playgroud) 可能的重复:
C#:复制数组的任何更快的方法?
我有一个像这样的结构数组:
struct S
{
public long A;
public long B;
}
...
S[] s1 = new S[1000000];
...
S[] = new S[s1.Length];
// Need to create a copy here.
Run Code Online (Sandbox Code Playgroud)
我可以使用不安全模式并将结构的源数组复制到字节数组,然后从字节数组复制到结构的目标数组。但这意味着我将不得不分配一个巨大的中间字节数组。有没有办法避免这种情况?是否有可能以某种方式将目标数组表示为字节数组并直接复制到那里?
unsafe
{
int size = Marshal.SizeOf(s0[0]) * s0.Length;
byte[] tmp = new byte[size];
fixed (var tmpSrc = &s0[0])
{
IntPtr src = (IntPtr)tmpSrc;
Marchal.Copy(tmpSrc, 0, tmp, 0, size);
}
// The same way copy to destination s1 array...
}
Run Code Online (Sandbox Code Playgroud) 这是一个场景.由IIS托管的网关.请求可能需要向另一个服务发出多个独立的其他请求,每个服务可能需要几秒钟.当然我认为它是并行化的一个很好的候选者.但是,如果我应该这样做,我会有内部斗争,如果我这样做,那么我应该使用什么样的并行度.我担心的是app中的所有线程通常都是由.net线程池管理的,所以如果我最终分配太多线程(甚至等待),我最终可能会扼杀其他网关功能和API吗?
我的应用程序正在接收从服务器发送到Apple后端的APN.当通知到达用户的设备时,用户自然可能无法打开应用程序.与此同时,我的服务器可能会推送更多通知.它们都包含一些在处理通知时很重要的用户数据.那怎么处理呢?iOS不会捆绑并给我一批,是吗?
以下是我将要解决的方法,其中没有一个是简单的.
didReceiveRemoteNotification.
要么didReceiveRemoteNotification不会被调用,因此app必须从服务器获取所有需要的数据.
要么didReceiveRemoteNotification.还要别的吗?我想念的更简单吗?
我被卡住了.我已经创建了这个应用程序已有一段时间了.那时我刚刚使用了我的账户.现在,我想向用户提供与系统支持电子邮件相对应的其他电子邮件.有没有办法改变它?

更新:请看我的评论.这一切都是关于当前登录的用户,没有别的.
我惊讶地发现我的应用程序内存占用不断增长 - 运行时间越长,消耗的内存就越多。因此,windbg我用一些魔法指出了我基于ConcurrentDictionary. CD 有很多对我来说非常酷的好处(其中之一是它的数据永远不会在 LOH 中结束)。TryAdd和TryRemove是用于添加和驱逐项目的两种方法。!gcroot一些较旧的元素引导我回到我的缓存。ILSpy 的一些调查使我得出了这个结论:
TryRemove并没有真正删除一个元素。它所做的只是更改链表指针以跳过从不将数组元素的值分配给null. 这可以防止 GC 收集旧的驱逐对象。
真的吗?这是一个已知的问题吗?如果是这样,我唯一的选择是TryUpdate(key, null)然后TryRemove(key)?如果是这样,那么我必须锁定ConcurrentDictionary访问权限,这是矛盾的。
这是 ILSpy 转储:
// System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>
private bool TryRemoveInternal(TKey key, out TValue value, bool matchValue, TValue oldValue)
{
while (true)
{
ConcurrentDictionary<TKey, TValue>.Tables tables = this.m_tables;
int num;
int num2;
this.GetBucketAndLockNo(this.m_comparer.GetHashCode(key), out num, out num2, tables.m_buckets.Length, tables.m_locks.Length);
lock (tables.m_locks[num2])
{
if (tables != this.m_tables)
{ …Run Code Online (Sandbox Code Playgroud) 通常,如果结构实现接口,则将此类结构分配给接口变量会导致装箱,例如:
interface IFoo {}
struct S : IFoo {}
S s = ...
IFoo f = s; // boxing here
Run Code Online (Sandbox Code Playgroud)
但也有例外。看来IEquatable<T>在字典中实现和使用这样的结构作为键不会导致装箱。那么问题来了,如果我只是重写GetHashCode而不实现IEquatable<T>呢?会不会陷入某种特殊情况?
出于某种原因,我必须手动删除生成的文件夹并运行 gradle 任务以获取更新的 POJO。这是我的设置、预期行为还是错误?我的设置如下:
jooq {
library(sourceSets.main) {
jdbc {
driver = 'com.mysql.jdbc.Driver'
url = 'jdbc:mysql://localhost:3306/library'
user = 'library'
password = '123'
schema = 'library'
}
generator {
name = 'org.jooq.util.DefaultGenerator'
strategy {
name = 'org.jooq.util.DefaultGeneratorStrategy'
}
database {
name = 'org.jooq.util.mysql.MySQLDatabase'
inputSchema = 'library'
}
generate {
daos = true
}
target {
packageName = 'com.example.library.db'
directory = 'src/main/java'
}
}
}
}
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×5
java ×2
.net-4.0 ×1
collections ×1
concurrency ×1
google-plus ×1
gradle ×1
ios ×1
iphone ×1
jooq ×1
msbuild ×1
objective-c ×1
plinq ×1
python ×1
sql ×1