首页 / C# / cassandra c#驱动程序内存泄漏
cassandra c#驱动程序内存泄漏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了cassandra c#驱动程序内存泄漏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1337字,纯文字阅读大概需要2分钟。
内容图文
使用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.ISessions时遇到内存问题,即使我是通过using语句正确处理它.更改我的代码以重用单个ISession似乎已修复它.我不知道这是否是最佳解决方案.
内容总结
以上是互联网集市为您收集整理的cassandra c#驱动程序内存泄漏全部内容,希望文章能够帮你解决cassandra c#驱动程序内存泄漏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。