gpt4 book ai didi

c# - cassandra c# 驱动程序内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 23:08:18 26 4
gpt4 key购买 nike

使用 cassandra .net 驱动程序我们面临以下问题:当使用参数化 INSERT 插入大量行时,应用程序内存使用量不断增长:

class Program
{
static Cluster cluster = Cluster.Builder()
.AddContactPoints(ConfigurationManager.AppSettings["address"])
.Build();
static Session session = cluster
.Connect(ConfigurationManager.AppSettings["keyspace"]);
static int counter = 0;

static void Main(string[] args)
{
for (int i = 0; i < 50; i++)
{
new Thread(() =>
{
while (true)
{
new Person()
{
Name = Interlocked.Increment(ref counter).ToString(),
ID = Guid.NewGuid(),
Data = new byte[4096],
}.Save(session);
}
}).Start();
}

Console.ReadLine();
}
}

class Person
{
public Guid ID
{
get;
set;
}

public string Name
{
get;
set;
}

public byte[] Data
{
get;
set;
}

public void Save(Session session)
{
Stopwatch w = Stopwatch.StartNew();

session.Execute(session.Prepare(
"INSERT INTO Person(id, name, data) VALUES(?, ?, ?);")
.Bind(this.ID, this.Name, this.Data));

Console.WriteLine("{1} saved in {0} ms",
w.Elapsed.TotalMilliseconds, this.Name);
}
}

根据创建的内存转储,托管堆包含大量小字节数组(其中大部分是第 2 代),这可以追溯到内部 TypeInterpreter 类中的 cassandra 驱动程序的字节转换方法(InvConvert*) .

您对我们如何解决这个问题有什么建议或想法吗?

最佳答案

对于遇到此问题的任何其他人。我在创建大量 Cassandra.ISession 时遇到内存问题,即使我通过 using 语句正确处理它也是如此。更改我的代码以重用单个 ISession 似乎已修复它。我不知道这是否是最佳解决方案。

关于c# - cassandra c# 驱动程序内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com